關(guān)于__defineGetter__ 和__defineSetter__的說(shuō)明
更新時(shí)間:2007年05月12日 00:00:00 作者:
作者:anbutu
來(lái)源:http://anbutu.javaeye.com/blog/post/194276
關(guān)鍵字: JavaScript Mozilla __defineGetter__ __defineSetter__
Getter是一種獲取一個(gè)屬性的值的方法,Setter是一種設(shè)置一個(gè)屬性的值的方法??梢詾槿魏晤A(yù)定義的核心對(duì)象或用戶自定義對(duì)象定義getter和setter方法,從而為現(xiàn)有的對(duì)象添加新的屬性。
有兩種方法來(lái)定義Getter或Setter方法:
在對(duì)象初始化時(shí)定義
在對(duì)象定義后通過(guò)Object的__defineGetter__、__defineSetter__方法來(lái)追加定義
在使用對(duì)象初始化過(guò)程來(lái)定義Getter和Setter方法時(shí)唯一要做的事情就是在getter方法前面加上“get”,在setter方法前面加上“set”。
還有一點(diǎn)要注意的就是getter方法沒(méi)有參數(shù),setter方法必須有一個(gè)參數(shù),也就是要設(shè)置的屬性的新值。
例如:
o = {
value:9,
get b() {return this.value;},
set setter(x) {this.value = x;}
}
在對(duì)象定義后給對(duì)象添加getter或setter方法要通過(guò)兩個(gè)特殊的方法__defineGetter__和__defineSetter__。這兩個(gè)函數(shù)要求第一個(gè)是getter或setter的名稱,以string給出,第二個(gè)參數(shù)是作為getter或setter的函數(shù)。
例如我們給Date對(duì)象添加一個(gè)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);
至于采用哪種形式主要取決于個(gè)人的編程風(fēng)格,采用第一種形式結(jié)構(gòu)緊湊,更容易理解。但是假如你想在對(duì)象定義以后再添加Getter或Setter,或者這個(gè)對(duì)象的原型不是你寫(xiě)的或是內(nèi)置對(duì)象,那么只好采用第二種方式了。
下面是一個(gè)為Mozilla瀏覽器添加innerText屬性的實(shí)現(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
}
);
來(lái)源:http://anbutu.javaeye.com/blog/post/194276
關(guān)鍵字: JavaScript Mozilla __defineGetter__ __defineSetter__
Getter是一種獲取一個(gè)屬性的值的方法,Setter是一種設(shè)置一個(gè)屬性的值的方法??梢詾槿魏晤A(yù)定義的核心對(duì)象或用戶自定義對(duì)象定義getter和setter方法,從而為現(xiàn)有的對(duì)象添加新的屬性。
有兩種方法來(lái)定義Getter或Setter方法:
在對(duì)象初始化時(shí)定義
在對(duì)象定義后通過(guò)Object的__defineGetter__、__defineSetter__方法來(lái)追加定義
在使用對(duì)象初始化過(guò)程來(lái)定義Getter和Setter方法時(shí)唯一要做的事情就是在getter方法前面加上“get”,在setter方法前面加上“set”。
還有一點(diǎn)要注意的就是getter方法沒(méi)有參數(shù),setter方法必須有一個(gè)參數(shù),也就是要設(shè)置的屬性的新值。
例如:
復(fù)制代碼 代碼如下:
o = {
value:9,
get b() {return this.value;},
set setter(x) {this.value = x;}
}
在對(duì)象定義后給對(duì)象添加getter或setter方法要通過(guò)兩個(gè)特殊的方法__defineGetter__和__defineSetter__。這兩個(gè)函數(shù)要求第一個(gè)是getter或setter的名稱,以string給出,第二個(gè)參數(shù)是作為getter或setter的函數(shù)。
例如我們給Date對(duì)象添加一個(gè)year屬性:
復(fù)制代碼 代碼如下:
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);
至于采用哪種形式主要取決于個(gè)人的編程風(fēng)格,采用第一種形式結(jié)構(gòu)緊湊,更容易理解。但是假如你想在對(duì)象定義以后再添加Getter或Setter,或者這個(gè)對(duì)象的原型不是你寫(xiě)的或是內(nèi)置對(duì)象,那么只好采用第二種方式了。
下面是一個(gè)為Mozilla瀏覽器添加innerText屬性的實(shí)現(xiàn):
復(fù)制代碼 代碼如下:
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)文章
微信小程序出現(xiàn)wx.getLocation再次授權(quán)問(wèn)題的解決方法分析
這篇文章主要介紹了微信小程序出現(xiàn)wx.getLocation再次授權(quán)問(wèn)題的解決方法,結(jié)合實(shí)例形式分析了解決wx.getLocation再次授權(quán)問(wèn)題的相關(guān)操作步驟,需要的朋友可以參考下2019-01-01
js頁(yè)面加載后執(zhí)行的幾種方式小結(jié)
在實(shí)際應(yīng)用中往往需要在頁(yè)面加載完畢之后再去執(zhí)行相關(guān)的js代碼,之所以這么操作是有道理的,如果是操作dom元素,如果相關(guān)元素沒(méi)有加載完成,而去執(zhí)行js代碼,可能會(huì)導(dǎo)致錯(cuò)誤2020-01-01
一文帶你掌握掌握J(rèn)avaScript中不同屬性類型的細(xì)節(jié)
JavaScript是一種功能強(qiáng)大的編程語(yǔ)言,支持面向?qū)ο蟮木幊谭妒?,本文將介紹JavaScript中面向?qū)ο缶幊痰幕靖拍?,包括?duì)象、屬性類型、定義多個(gè)屬性和讀取屬性的特性2023-06-06
js實(shí)現(xiàn)兩點(diǎn)之間畫(huà)線的方法
這篇文章主要介紹了js實(shí)現(xiàn)兩點(diǎn)之間畫(huà)線的方法,涉及javascript圖形繪制的相關(guān)技巧,需要的朋友可以參考下2015-05-05
微信小程序通過(guò)一個(gè)json實(shí)現(xiàn)分享朋友圈圖片
這篇文章主要給大家介紹了關(guān)于微信小程序通過(guò)一個(gè)json實(shí)現(xiàn)分享朋友圈圖片的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用微信小程序具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
微信小程序開(kāi)發(fā)實(shí)現(xiàn)的選項(xiàng)卡(窗口頂部/底部TabBar)頁(yè)面切換功能圖文詳解
這篇文章主要介紹了微信小程序開(kāi)發(fā)實(shí)現(xiàn)的選項(xiàng)卡(窗口頂部/底部TabBar)頁(yè)面切換功能,結(jié)合圖文與實(shí)例形式詳細(xì)分析了微信小程序選項(xiàng)卡切換相關(guān)操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-05-05

