国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

關于__defineGetter__ 和__defineSetter__的說明

2024-09-06 12:42:24
字體:
來源:轉載
供稿:網友
作者:anbutu
來源:http://anbutu.javaeye.com/blog/post/194276
關鍵字: JavaScript   Mozilla __defineGetter__ __defineSetter__

Getter是一種獲取一個屬性的值的方法,Setter是一種設置一個屬性的值的方法。可以為任何預定義的核心對象或用戶自定義對象定義getter和setter方法,從而為現有的對象添加新的屬性。
有兩種方法來定義Getter或Setter方法:

在對象初始化時定義 
在對象定義后通過Object的__defineGetter__、__defineSetter__方法來追加定義 
在使用對象初始化過程來定義Getter和Setter方法時唯一要做的事情就是在getter方法前面加上“get”,在setter方法前面加上“set”。
還有一點要注意的就是getter方法沒有參數,setter方法必須有一個參數,也就是要設置的屬性的新值。
例如:

代碼如下:
o = {    
    value:9,    
    get b() {return this.value;},    
    set setter(x) {this.value = x;}    
}    

在對象定義后給對象添加getter或setter方法要通過兩個特殊的方法__defineGetter__和__defineSetter__。這兩個函數要求第一個是getter或setter的名稱,以string給出,第二個參數是作為getter或setter的函數。
例如我們給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);    

至于采用哪種形式主要取決于個人的編程風格,采用第一種形式結構緊湊,更容易理解。但是假如你想在對象定義以后再添加Getter或Setter,或者這個對象的原型不是你寫的或是內置對象,那么只好采用第二種方式了。
下面是一個為Mozilla瀏覽器添加innerText屬性的實現:

代碼如下:
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();    
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 仁布县| 茶陵县| 齐河县| 江华| 老河口市| 会理县| 海安县| 新宁县| 汉寿县| 南江县| 乌兰浩特市| 西乌| 乳山市| 云浮市| 德清县| 潜江市| 华亭县| 沙坪坝区| 乡宁县| 湘潭市| 沂南县| 庆安县| 通江县| 宁德市| 福贡县| 北安市| 肇源县| 涟源市| 信宜市| 临夏市| 富民县| 荣昌县| 蒙山县| 揭西县| 清新县| 芦溪县| 巴东县| 阳江市| 江阴市| 沁阳市| 任丘市|