javascript中的setter、getter是平時(shí)接觸比較少的方法,其本身也并不是標(biāo)準(zhǔn)方法,只在非ie瀏覽器里支持(ie內(nèi)核也許有其他方法可以做到呢?暫時(shí)不知其解),但是加以利用可以做許多事情,比如:
1、對(duì)數(shù)據(jù)的訪問(wèn)限制:
a.value是對(duì)value變量的getter方法調(diào)用,如果在getter方法實(shí)現(xiàn)中拋出異常,可以阻止對(duì)value變量的訪問(wèn)
2、對(duì)dom變量進(jìn)行監(jiān)聽:
window.name是一個(gè)跨域非常好用的dom屬性(大名鼎鼎,詳見百度),如果覆蓋window.name的setter實(shí)現(xiàn)則可以實(shí)現(xiàn)跨頁(yè)面的內(nèi)存異步通信
3、自己發(fā)揮想象力,能做的事情好多滴
以下皆轉(zhuǎn):
首先,我們先來(lái)快速了解什么是Getters和Setters,以及它們?yōu)槭裁春苡杏?。然后,我們?lái)看看現(xiàn)在都有哪些平臺(tái)支持Gettets和Setters。
Getters和Setters
Getters和Setters使你可以快速獲取或設(shè)置一個(gè)對(duì)象的數(shù)據(jù)。一般來(lái)說(shuō),一個(gè)對(duì)象擁有兩個(gè)方法,分別用于獲取和設(shè)置某個(gè)值,比如:
{
getValue: function(){
return this._value;
},
setValue: function(val){
this._value = val;
}
}
用這種方式寫JavaScript的一個(gè)明顯的好處是:你可以用它來(lái)隱藏那些不想讓外界直接訪問(wèn)的屬性。最終的代碼看起來(lái)就像下面這樣(用閉包保存新創(chuàng)建的Filed對(duì)象的value):
function Field(val){
var value = val;
this.getValue = function(){
return value;
};
this.setValue = function(val){
value = val;
};
}
于是我們可以這樣使用:
var field = new Field("test");
field.value
// => undefined
field.setValue("test2")
field.getValue()
// => "test2"
我們來(lái)模擬上例中的 “隱藏的value屬性”,我們的代碼就像這樣:
function Field(val){
var value = val;
this.__defineGetter__("value", function(){
return value;
});
this.__defineSetter__("value", function(val){
value = val;
});
}
但是呢,你不喜歡這樣寫,而傾向在對(duì)象的prototype中定義getters和setters(私有變量寫在哪并不重要),我們可以用另一種語(yǔ)法。
function Field(val){
this.value = val;
}
Field.prototype = {
get value(){
return this._value;
},
set value(val){
this._value = val;
}
};
這種語(yǔ)法看起來(lái)很不可思議,但是使用過(guò)一段時(shí)間之后,接受它也很容易。
接下來(lái)是另一個(gè)例子,它允許外界獲取一個(gè)username數(shù)組,但是卻不能獲取原始的,隱藏的user對(duì)象。
function Site(users){
this.__defineGetter__("users", function(){
// JS 1.6 Array map()
return users.map(function(user){
return user.name;
});
};
}
記住以下幾點(diǎn):
一個(gè)對(duì)象內(nèi),每個(gè)變量只能有一個(gè)getter或setter。(因此value可以有一個(gè)getter和一個(gè)setter,但是value絕沒有兩個(gè)getters)
刪除getter或setter的唯一方法是:delete object[name]。delete可以刪除一些常見的屬性,getters和setters。
如果使用__defineGetter__或__defineSetter__,它會(huì)重寫之前定義的相同名稱的getter或setter,甚至是屬性(property)。
平臺(tái)
支持的瀏覽器有:
Firefox
Safari 3+
Opera 9.5
以上所述是小編給大家介紹的JavaScript中setter和getter方法介紹的全部敘述,希望對(duì)大家有所幫助