- 相關(guān)推薦
JavaScript實(shí)例講解
這帶來(lái)的好處是內部函數可以訪(fǎng)問(wèn)定義它們的外部函數的參數和變量。
首先,我們來(lái)構造一個(gè)簡(jiǎn)單的對象。
復制代碼 代碼如下:
var testObj = {
value: 10,
add: function(inc){
this.value += (typeof inc === "number") ? inc : 1;
}
};
testObj.add();
testObj.value; // 11
testObj.add(2);
testObj.value; // 13
這樣寫(xiě)就有一個(gè)問(wèn)題,value值不能保證不會(huì )被非法修改,可以按如下的方法進(jìn)行修改。
復制代碼 代碼如下:
var testObj = (function(){
var value = 10;
return {
add: function(inc){
value += (typeof inc === "number") ? inc : 1;
},
getValue: function(){
return value;
}
};
})();
testObj.add();
testObj.getValue(); // 11
testObj.add(2);
testObj.getValue(); // 13
我們可以通用調用一個(gè)函數的形式去初始化testObj,該函數會(huì )返回一個(gè)對象字面量,函數里定義了一個(gè)value變量,該變量對add和getValue方法總是可用的,但函數的作用域使得它對其他的程序來(lái)說(shuō)是不可見(jiàn)的。同時(shí),我們還可以得出一個(gè)結論,內部函數擁有比它的外部函數更長(cháng)的生命周期。
我們再繼續看一個(gè)構造函數調用的例子。
復制代碼 代碼如下:
var MyObj = function(str){
this.status = str;
};
MyObj.prototype.getStatus = function(){
return this.status;
};
var obj = new MyObj("javascript");
obj.getStatus(); // "javascript"
這樣寫(xiě)并沒(méi)有錯,但是會(huì )有一點(diǎn)“多此一舉”,為什么要用一個(gè)getStatus方法去訪(fǎng)問(wèn)一個(gè)本可以直接訪(fǎng)問(wèn)到的屬性呢?如果status是私有屬性,那當然才有意義。
復制代碼 代碼如下:
var obj = function(status){
return {
getStatus: function(){
return status;
}
};
};
var myObj = obj("javascript");
myObj.getStatus(); // "javascript"
這里當我們調用obj的時(shí)候,它返回包含getStatus方法的一個(gè)新對象,該對象的一個(gè)引用保存在myObj中,即使obj已經(jīng)返回了,但getStatus方法仍然享有訪(fǎng)問(wèn)obj對象的status屬性的特權。getStatus方法并不是訪(fǎng)問(wèn)該參數的一個(gè)副本,它訪(fǎng)問(wèn)的就是該參數本身。這是可能的,因為該函數可以訪(fǎng)問(wèn)它被創(chuàng )建時(shí)所處的上下文環(huán)境,這被稱(chēng)為閉包。
【JavaScript實(shí)例講解】相關(guān)文章:
JavaScript的課堂講解09-03
JavaScript fontcolor方法入門(mén)實(shí)例07-07
JavaScript中push(),join() 函數實(shí)例詳解09-05
javascript閉包的定義及應用實(shí)例分析08-25
實(shí)例講解托福閱讀推斷題技巧06-20
對javascript的理解08-08
常用的JavaScript模式09-22
Javascript的this用法簡(jiǎn)述08-15
JavaScript學(xué)習筆記08-24
JavaScript 基礎教學(xué)09-29