JavaScript中setter和getter方法介紹
來源:易賢網 閱讀:983 次 日期:2016-07-28 16:10:54
溫馨提示:易賢網小編為您整理了“JavaScript中setter和getter方法介紹”,方便廣大網友查閱!

javascript中的setter、getter是平時接觸比較少的方法,其本身也并不是標準方法,只在非ie瀏覽器里支持(ie內核也許有其他方法可以做到呢?暫時不知其解),但是加以利用可以做許多事情,比如:

1、對數據的訪問限制:

a.value是對value變量的getter方法調用,如果在getter方法實現中拋出異常,可以阻止對value變量的訪問

2、對dom變量進行監聽:

window.name是一個跨域非常好用的dom屬性(大名鼎鼎,詳見百度),如果覆蓋window.name的setter實現則可以實現跨頁面的內存異步通信

3、自己發揮想象力,能做的事情好多滴

以下皆轉:

首先,我們先來快速了解什么是Getters和Setters,以及它們為什么很有用。然后,我們來看看現在都有哪些平臺支持Gettets和Setters。

Getters和Setters

Getters和Setters使你可以快速獲取或設置一個對象的數據。一般來說,一個對象擁有兩個方法,分別用于獲取和設置某個值,比如:

{

getValue: function(){

return this._value;

},

setValue: function(val){

this._value = val;

}

}

用這種方式寫JavaScript的一個明顯的好處是:你可以用它來隱藏那些不想讓外界直接訪問的屬性。最終的代碼看起來就像下面這樣(用閉包保存新創建的Filed對象的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"

我們來模擬上例中的 “隱藏的value屬性”,我們的代碼就像這樣:

function Field(val){

var value = val;

this.__defineGetter__("value", function(){

return value;

});

this.__defineSetter__("value", function(val){

value = val;

});

}

但是呢,你不喜歡這樣寫,而傾向在對象的prototype中定義getters和setters(私有變量寫在哪并不重要),我們可以用另一種語法。

function Field(val){

this.value = val;

}

Field.prototype = {

get value(){

return this._value;

},

set value(val){

this._value = val;

}

};

這種語法看起來很不可思議,但是使用過一段時間之后,接受它也很容易。

接下來是另一個例子,它允許外界獲取一個username數組,但是卻不能獲取原始的,隱藏的user對象。

function Site(users){

this.__defineGetter__("users", function(){

// JS 1.6 Array map()

return users.map(function(user){

return user.name;

});

};

}

記住以下幾點:

一個對象內,每個變量只能有一個getter或setter。(因此value可以有一個getter和一個setter,但是value絕沒有兩個getters)

刪除getter或setter的唯一方法是:delete object[name]。delete可以刪除一些常見的屬性,getters和setters。

如果使用__defineGetter__或__defineSetter__,它會重寫之前定義的相同名稱的getter或setter,甚至是屬性(property)。

平臺

支持的瀏覽器有:

Firefox

Safari 3+

Opera 9.5

以上所述是小編給大家介紹的JavaScript中setter和getter方法介紹的全部敘述,希望對大家有所幫助

更多信息請查看網絡編程
易賢網手機網站地址:JavaScript中setter和getter方法介紹
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
未满十八18勿进黄网站免费看