糯米文學吧

位置:首頁 > 設計 > 網頁設計

JavaScript實例講解

這帶來的好處是內部函數可以訪問定義它們的外部函數的參數和變量。

JavaScript實例講解

首先,我們來構造一個簡單的對象。

複製代碼 代碼如下:

var testObj = {

value: 10,

add: function(inc){

e += (typeof inc === "number") ? inc : 1;

}

};

();

e; // 11

(2);

e; // 13

這樣寫就有一個問題,value值不能保證不會被非法修改,可以按如下的方法進行修改。

複製代碼 代碼如下:

var testObj = (function(){

var value = 10;

return {

add: function(inc){

value += (typeof inc === "number") ? inc : 1;

},

getValue: function(){

return value;

}

};

})();

();

alue(); // 11

(2);

alue(); // 13

我們可以通用調用一個函數的形式去初始化testObj,該函數會返回一個對象字面量,函數裏定義了一個value變量,該變量對add和getValue方法總是可用的,但函數的作用域使得它對其他的程序來説是不可見的。同時,我們還可以得出一個結論,內部函數擁有比它的外部函數更長的.生命週期。

我們再繼續看一個構造函數調用的例子。

複製代碼 代碼如下:

var MyObj = function(str){

us = str;

};

tatus = function(){

return us;

};

var obj = new MyObj("javascript");

tatus(); // "javascript"

這樣寫並沒有錯,但是會有一點“多此一舉”,為什麼要用一個getStatus方法去訪問一個本可以直接訪問到的屬性呢?如果status是私有屬性,那當然才有意義。

複製代碼 代碼如下:

var obj = function(status){

return {

getStatus: function(){

return status;

}

};

};

var myObj = obj("javascript");

tatus(); // "javascript"

這裏當我們調用obj的時候,它返回包含getStatus方法的一個新對象,該對象的一個引用保存在myObj中,即使obj已經返回了,但getStatus方法仍然享有訪問obj對象的status屬性的特權。getStatus方法並不是訪問該參數的一個副本,它訪問的就是該參數本身。這是可能的,因為該函數可以訪問它被創建時所處的上下文環境,這被稱為閉包。