在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ HTML/ 淺談 javascript 的調(diào)試
淺談 JavaScript 之事件綁定
淺談 javascript 中字符串 String 與數(shù)組 Array
淺談 javascript 中基本包裝類型
淺談 JavaScript Math 和 Number 對象
淺談 Javascript 的靜態(tài)屬性和原型屬性
淺談 JavaScript 中定義變量時有無 var 聲明的區(qū)別
淺談 JavaScript Array 對象
淺談 JavaScript 函數(shù)參數(shù)的可修改性問題
淺談 javascript 中的 instanceof 和 typeof
淺談 JavaScript 中 Date (日期對象),Math 對象
淺談 Javascript 執(zhí)行順序
淺談 javascript 函數(shù)屬性和方法
淺談 JavaScript 中面向?qū)ο蠹夹g(shù)的模擬
淺談 javascript 的原型繼承
淺談 javascript 事件取消和阻止冒泡
根據(jù)一段代碼淺談 Javascript 閉包
淺談 Javascript 面向?qū)ο缶幊?/span>
淺談 javascript 六種數(shù)據(jù)類型以及特殊注意點
淺談 Javascript 變量作用域問題
淺談 javascript 函數(shù)內(nèi)部屬性
淺談 javascript 中自定義模版
淺談 JavaScript 字符集
淺談 javascript 面向?qū)ο缶幊?/span>
淺談 JavaScript 框架分類
淺談 JavaScript 中的 Math.atan() 方法的使用
淺談 Javascript 數(shù)組與字典
淺談 JavaScript 數(shù)據(jù)類型及轉(zhuǎn)換
淺談 javascript 的調(diào)試
淺談 Javascript 嵌套函數(shù)及閉包
淺談 javascript 回調(diào)函數(shù)
淺談 JavaScript Date 日期和時間對象
淺談 Javascript 中的 Function 與 Object
淺談 JavaScript 數(shù)據(jù)類型
淺談 javascript 中 this 在事件中的應(yīng)用
淺談 javascript 中的閉包
淺談 javascript 函數(shù)劫持
淺談 Javascript 中深復(fù)制
淺談 JavaScript 函數(shù)節(jié)流
淺談 JavaScript 中的 String 對象常用方法
淺談 JavaScript 事件的屬性列表
淺談 JavaScript 函數(shù)與棧
淺談 JavaScript 的事件
淺談 javascript 中的作用域
淺談 JavaScript 的執(zhí)行效率
淺談 Javascript 事件模擬
淺談 JavaScript function 函數(shù)種類
淺談 javascript 歸并方法
淺談 javascript 迭代方法
淺談 JavaScript 編程語言的編碼規(guī)范
淺談 JavaScript 實現(xiàn)面向?qū)ο笾械念?/span>
淺談 Javascript 鼠標和滾輪事件
淺談 Javascript Base64 加密解密
淺談 Javascript 中勻速運動的停止條件
淺談 javascript 實現(xiàn)八大排序
淺談 javascript 的分號的使用
淺談 javascript 中 createElement 事件
淺談 javascript 的數(shù)據(jù)類型檢測
淺談 javascript 對象模型和 function 對象
淺談 Javascript 如何實現(xiàn)勻速運動
淺談 JavaScript 字符串與數(shù)組
淺談 javascript 面向?qū)ο蟪绦蛟O(shè)計
淺談 Javascript 事件處理程序的幾種方式

淺談 javascript 的調(diào)試

最近比較吐槽,大家都知道,現(xiàn)在 web 前端相對幾年前來說已經(jīng)變得很重了,各種 js 框架,各種面對對象,而且項目多了,就會提取公共模塊。

這些模塊的 UI 展示都一樣,不一樣的就是后臺邏輯,舉個例子吧,我們做企業(yè)差旅的時候,通常都有一個成本中心的js公共模塊,客戶在預(yù)定機票的時候來填寫這個成本中心,而這種成本中心分布在 online,offline 和 app 等預(yù)定端,這樣也是方便后期和客戶公司進行月結(jié)算。

我們還知道,項目做大了,復(fù)雜化了,SOA 化了之后,很多問題就來了,就像 web 中的一個理論,所有前端的數(shù)據(jù)都是不可信的,那對方團隊的接口數(shù)據(jù)又何嘗不是,以前項目小的時候,不會那么不自信,也只會在 Logic error 的時候會記錄下日志,正常的業(yè)務(wù)流程一般很少記錄,畢竟 info 日志看著不美觀,而且還會消耗服務(wù)器帶寬,也還會拖累 web 的性能。

但是項目大了,當你某天在項目中遇到了奇怪的 bug 時,你靠著殘缺不全的日志,好不容易用肉眼逐行追溯到了接口,但是參數(shù)太多,無法準確的還原接口的參數(shù)數(shù)據(jù),但是你又100%的自信認定肯定就是接口的返回問題,但是又拿不出完整的報文,這時候你又沒法找接口提供方,當時那個無奈呀,多想最好每行都有日志該多好啊。

有了教訓(xùn)后,記流程日志的趨勢越來越盛行,最終也釀造了一個年初的大事件,稀里糊涂的說了一大堆,web 后端如此,那現(xiàn)在的重前端不也一樣要記錄日志么?我們知道既然是公共的 js 模塊,那這個模塊肯定自己封裝了一些方法,肯定是絕對不可以讓第三方程序去操作它自己的文本結(jié)點,比如下面這樣:

[js] view plaincopy
<!--third  module -->  

公司:<input type="text" id="company" value="xxx有限公司" />  

員工姓名:<input type="text" id="username" value="張三" />  

<!-- -->  

<script type="text/javascript">  

    //成本中心  

    var costCenter = (function () {  

         var company = (document.getElementById("company") || "") && document.getElementById("company").value;  

         var username = (document.getElementById("username") || "") && document.getElementById("username").value;  

         var result = {  

             getInfo: function () {  

                 return { company: company, username: username };  

             },  

             validation: function () {  

                 return Boolean(company && username);  

             }  

         };  

         return result;  

     })();  

 </script>  

為了簡化操作,第三方UI提供了公司名和員工姓名的 UI 結(jié)點,并且封裝了一個 costcenter 類來提供讀取方法,可以看到,我的預(yù)定程序只需讀取 costCenter.getInfo就好了,也起到了一個封裝的作用。

但是問題就出現(xiàn)在這里,項目實戰(zhàn)中會因為各種原因?qū)е略?costcenter 中取不到值,當然也可能是 common ui的 bug。

但是當時你又不能非常確定是否真的取到了值,但是在邏輯上就算取不到值,原則上你也不能阻止訂單提交,所以為了徹底追蹤 bug,就寫了個 logCenter 單例類來記錄日志。通常用js 來記錄 log 有這種方法。

ajax

這種方式很容易想到,但是你使用原生的 xmlhttprequest 的話,還需要考慮瀏覽器兼容,但不用原生的話,就要借助于第三方框架,比如 jquery,但是畢竟還是有很多公司是不使用 jquery 的,所以這個要根據(jù)實際的需要來使用了。

[js] view plaincopy
//日志中心  

    var logCenter = (function () {  

        var result = {  

            info: function (title, message) {  

                //ajax操作  

                $.get("<a  target="_blank">http://xxx.com</a>", { "title": title, "message": message }, function () {  

                }, "post");  

             }  

         };  

         return result;  

     })();  

image

我們的 dom 中有一個叫做 image 的對象,所以可以通過動態(tài)給它的 src 賦值來達到請求后臺 url 的目的,同時在 url 中加上我們需要傳遞 title 和 message 信息,這種動態(tài)給 image.src 的方式是不需要考慮瀏覽器兼容性的問題,非常不錯。

[js] view plaincopy
//日志中心  

    var logCenter = (function () {  

        var result = {  

            info: function (title, message) {  

                //ajax操作  

                $.get("<a  target="_blank">http://xxx.com</a>", { "title": title, "message": message }, function () {  

                }, "post");  

             },  

             info_image: function (title, message) {  

                 //image  

                 var img = new Image();  

                 img.src = "<a  target="_blank">http://www.baidu.com?title</a>=" + title + "&message=" + message + "&temp=" + (Math.random() * 100000);  

             }  

         };  

         return result;  

     })();  

以上就是本文的主要內(nèi)容了,后續(xù)我們將繼續(xù)深入探討