讀JavaScript語言精粹後部分知識的總結

不同的函數調用方式

方法調用模式

一個函數B是另一個對象A的屬性時,通過A.B來調用函數B的方式我們稱之爲方法調用模式
  A= {
            a:'a vairalbe',
            B: function() {
                //
            }
        }
        A.B();

這種調用模式中,B函數中的this指向調用它的對象,A

函數調用模式

若函數B並非是哪個對象的屬性,單純通過B()來調用,則該方法爲函數調用。
 var A = function ()
       {
           var a = 'a variable';
           var B = function() {
               ///
           };
           B();
       };
        A();
在這種情況下,B中的this並不指向其外層函數this變量,而是指向全局對象。這是js語言設計上的一個錯誤,會爲開發帶來很多麻煩,有一種方法,來改善這一問題。我們創建一個變量,來手動指向外層函數的this變量。

 myObject.double = function() {
            var that = this;//解決方法
            var helper = function() {
                that.value = add(that.value, that, value);
            };
            helper();
        };
        myObject.double();
        document.writeln(myObject.value);//6

構造器調用模式

由於很多人還是習慣基於類的對象,而js是基於原型的對象,因此js提供了一套類似於基於類的語言的對象構建語法,通過new 關鍵字創建對象。

Apply調用模式

每個函數都擁有一個自己的apply方法。可通過該方法調用指定函數以及制定this指向的對象。

減少全局變量污染

js中可以隨意定義全局變量,但由於它會削弱程序的靈活性,建議儘量少的使用。
其實可以儘量將需要聲明爲全局變量的變量統一放在一個唯一的全局變量中,這樣在滿足了需求的同時,還減少了全局變量的使用。
    var MYAPP = {};//唯一的全局變量
        MYAPP.stooge = {
            firstName: 'joe',
            lastName: 'Howard'
        };
        MYAPP.flight = {
            airline: 'Oceanic',
            number: 815,
            departure: {
                IATA:'SYD',
                TIME: '2004-09-22 14:55',
            }
        };

發佈了109 篇原創文章 · 獲贊 11 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章