javascript中的__defineGetter__和__defineSetter__介紹
Getter是一種獲取一個屬性的值的方法,Setter是一種設(shè)置一個屬性的值的方法??梢詾槿魏晤A(yù)定義的核心對象或用戶自定義對象定義getter和setter方法,從而為現(xiàn)有的對象添加新的屬性。
有兩種方法來定義Getter或Setter方法:
1.在對象初始化時定義
2.在對象定義后通過Object的__defineGetter__、__defineSetter__方法來追加定義
在使用對象初始化過程來定義Getter和Setter方法時唯一要做的事情就是在getter方法前面加上“get”,在setter方法前面加上“set”。
還有一點要注意的就是getter方法沒有參數(shù),setter方法必須有一個參數(shù),也就是要設(shè)置的屬性的新值。
例如:
o = {
value:9,
get b() {return this.value;},
set setter(x) {this.value = x;}
}
在對象定義后給對象添加getter或setter方法要通過兩個特殊的方法__defineGetter__和__defineSetter__。這兩 個函數(shù)要求第一個是getter或setter的名稱,以string給出,第二個參數(shù)是作為getter或setter的函數(shù)。
例如我們給Date對象添加一個year屬性:
Date.prototype.__defineGetter__('year', function() {return this.getFullYear();});
Date.prototype.__defineSetter__('year', function(y) {this.setFullYear(y)});
var now = new Date;
alert(now.year);
now.year = 2006;
alert(now);
至于采用哪種形式主要取決于個人的編程風(fēng)格,采用第一種形式結(jié)構(gòu)緊湊,更容易理解。但是假如你想在對象定義以后再添加Getter或Setter,或者這個對象的原型不是你寫的或是內(nèi)置對象,那么只好采用第二種方式了。
下面是一個為Mozilla瀏覽器添加innerText屬性的實現(xiàn):
HTMLElement.prototype.__defineGetter__
(
"innerText",function()
//define a getter method to get the value of innerText,
//so you can read it now!
{
var textRange = this.ownerDocument.createRange();
//Using range to retrieve the content of the object
textRange.selectNodeContents(this);
//only get the content of the object node
return textRange.toString();
// give innerText the value of the node content
}
相關(guān)文章
JS響應(yīng)鼠標(biāo)點擊實現(xiàn)兩個滑塊區(qū)間拖動效果
這篇文章主要介紹了JS實現(xiàn)的兩個滑塊區(qū)間拖動效果代碼,涉及JavaScript響應(yīng)鼠標(biāo)事件針對頁面元素的動態(tài)操作技巧,需要的朋友可以參考下2015-10-10
解決layui中onchange失效以及form動態(tài)渲染失效的問題
今天小編就為大家分享一篇解決layui中onchange失效以及form動態(tài)渲染失效的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09
前端本地文件獲取excel表格內(nèi)容并渲染在頁面的方法
這篇文章主要介紹了前端本地文件獲取excel表格內(nèi)容并渲染在頁面的方法,主要利用SheetJS插件用于處理Excel文件,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-03-03
EditPlus 正則表達(dá)式 實戰(zhàn)(3)
這篇文章主要介紹了EditPlus 正則表達(dá)式 實戰(zhàn)(3)的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-12-12
WebStorm中如何將自己的代碼上傳到github示例詳解
這篇文章主要介紹了WebStorm中如何將自己的代碼上傳到github,本文分步驟通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10

