javascript中的__defineGetter__和__defineSetter__介紹
Getter是一種獲取一個(gè)屬性的值的方法,Setter是一種設(shè)置一個(gè)屬性的值的方法??梢詾槿魏晤A(yù)定義的核心對(duì)象或用戶自定義對(duì)象定義getter和setter方法,從而為現(xiàn)有的對(duì)象添加新的屬性。
有兩種方法來定義Getter或Setter方法:
1.在對(duì)象初始化時(shí)定義
2.在對(duì)象定義后通過Object的__defineGetter__、__defineSetter__方法來追加定義
在使用對(duì)象初始化過程來定義Getter和Setter方法時(shí)唯一要做的事情就是在getter方法前面加上“get”,在setter方法前面加上“set”。
還有一點(diǎn)要注意的就是getter方法沒有參數(shù),setter方法必須有一個(gè)參數(shù),也就是要設(shè)置的屬性的新值。
例如:
o = {
value:9,
get b() {return this.value;},
set setter(x) {this.value = x;}
}
在對(duì)象定義后給對(duì)象添加getter或setter方法要通過兩個(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ì)象的原型不是你寫的或是內(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
}
- JavaScript之Getters和Setters 平臺(tái)支持等詳細(xì)介紹
- JavaScript中setter和getter方法介紹
- 談?wù)勔騐ue.js引發(fā)關(guān)于getter和setter的思考
- Javascript中的getter和setter初識(shí)
- JavaScript的setter與getter方法
- 淺談JS對(duì)象添加getter與setter的5種方法
- js中g(shù)etter和setter用法實(shí)例分析
- JavaScript對(duì)象訪問器Getter及Setter原理解析
- JavaScript?getter?setter金字塔???????
相關(guān)文章
網(wǎng)站被黑的假象--ARP欺騙之頁面中加入一段js
網(wǎng)站被黑的假象--ARP欺騙之頁面中加入一段js...2007-05-05微信小程序?qū)崿F(xiàn)收藏與取消收藏切換圖片功能
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)收藏與取消收藏切換圖片功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-08-08JS中產(chǎn)生20位隨機(jī)數(shù)以0-9為例也可以是a-z A-Z
本節(jié)主要介紹了JS如何產(chǎn)生隨機(jī)數(shù),本例產(chǎn)生20位隨機(jī)數(shù)以0-9為例也可以是a-z A-Z,需要的朋友可以參考下2014-08-08詳解JavaScript閉包的優(yōu)缺點(diǎn)和作用
閉包是指在 JavaScript 中,內(nèi)部函數(shù)可以訪問其外部函數(shù)作用域中的變量,即使外部函數(shù)已經(jīng)執(zhí)行完畢,這種特性被稱為閉包,本文將給大家介紹一下JavaScript閉包的優(yōu)缺點(diǎn)和作用,需要的朋友可以參考下2023-09-09javascript+iframe 實(shí)現(xiàn)無刷新載入整頁的代碼
用iframe也可以實(shí)現(xiàn),但沒有上述做法完美,參見discuz那些網(wǎng)站,如登陸彈出一個(gè)層,也是載入的一個(gè)頁面,但我發(fā)現(xiàn)狀態(tài)欄左邊出現(xiàn)的是 正在打開about:blank2010-03-03js addDqmForPP給標(biāo)簽內(nèi)屬性值加上雙引號(hào)的函數(shù)
這篇文章主要介紹了js addDqmForPP給標(biāo)簽內(nèi)屬性值加上雙引號(hào)的函數(shù),需要的朋友可以參考下2016-12-12