javascriptの中の_udefineGetter_u u同前defineSetter_u u紹介する

2112 ワード

Getterは属性の値を取得する方法であり、Setterは属性の値を設定する方法である.任意の事前定義されたコアオブジェクトまたはユーザーカスタムオブジェクトのために、getterおよびsetter方法を定義して、既存のオブジェクトに新しい属性を追加することができます.
GetterまたはSetter方法を定義する二つの方法がある.
1.オブジェクト初期化時に2を定義します.オブジェクト定義後にObjectの___u udefineGetter_、_defineSetter_u uメソッドに定義を追加します.
オブジェクト初期化プロセスを使用して、GetterとSetter方法を定義する時に唯一することは、getterメソッドの前に「get」を追加し、setterメソッドの前に「set」を追加することです.
もう一つ注意したいのは、getterメソッドにはパラメータがありません.setterメソッドにはパラメータが必要です.つまり設定する属性の新しい値が必要です.
たとえば:
 
  
   o = { 
        value:9, 
        get b() {return this.value;}, 
        set setter(x) {this.value = x;} 
    } 
オブジェクト定義後にオブジェクトにgetterまたはsetterを追加する方法は、2つの特殊な方法で行う必要があります.defineGetter_u u同前defineSetter_u.この二つの関数は最初に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を追加したいなら、またはこのオブジェクトの原型はあなたが書いたものではないか、または内蔵したものではないなら、第二の方式を採用するしかないです.
以下はMozilaブラウザに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(); 
          //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 
       }