Water Sunlight

軽量プログラミングの文法 - JavaScript/Python

ユーザ用ツール

サイト用ツール


js:object:private

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
js:object:private [2021/05/24 10:54]
y2sunlight [Object.defineProperty]
js:object:private [2021/05/31 12:36] (現在)
tanaka
行 47: 行 47:
 ==== 特権メソッド ==== ==== 特権メソッド ====
  
-> TODO+特権メソッドとは、クラスのプライベートメンバにアクセスできるメソッド(クロージャ)の事です。特権メソッド自体はクラス内のパブリックメンバや他のインスタンスからアクセス出来るので、内部のプライベートメンバと外部との橋渡し的存在となります。 \\ 
 + 
 +特権メソッドはアクセッサ―と呼ばれることがあり、プライベートメンバを取得するゲッターメソッドと、設定するセッターメソッドに分かれます。上例では ''setRadius()'' や ''getRadius()'' がアクセッサーになります。 
 + 
 +  * getRadius() ・・・ ゲッターメソッド 
 +  * setRadius() ・・・ セッターメソッド  
 \\ \\
  
 ===== Object.defineProperty ===== ===== Object.defineProperty =====
  
-上例の様にクロージャ(特権メソッド)を使用して、アクセッサを実装する代わりに、Object.definePropertyメソッドを利用してアクセッサメソッドを実装することもできます。+上例の様に特権メソッド(クロージャ)を使用して、アクセッサを実装する代わりに、''Object.defineProperty'' メソッドを利用してアクセッサメソッドを実装することもできます。 
 + 
 +<sxh javascript;title:Example> 
 +function Circle(radius) { 
 +  
 +    var _radius; 
 + 
 +    // プライベートメソッド(クロージャ) 
 +    var _area = function() { 
 +        return _radius * _radius * Math.PI; 
 +    }; 
 + 
 +    Object.defineProperty( 
 +        this, 
 +        'radius', 
 +        { 
 +            get: function(){ 
 +                return _radius; 
 +            }, 
 +            set: function(radius){ 
 +                _radius = radius; 
 +            } 
 +        } 
 +    ); 
 + 
 +    Object.defineProperty( 
 +        this, 
 +        'area', 
 +        { 
 +            get: function(){ 
 +                return _area();  
 +            } 
 +        } 
 +    ); 
 + 
 +    this.radius = radius; 
 +
 +  
 +var a = new Circle(10); 
 + 
 +console.log(a.radius);  // 結果:10 
 +console.log(a.area);    // 結果:314.1592653589793 
 +</sxh> 
 + 
 +詳しくは[[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty|こちら]]を参照してください
  
 \\ \\
 +
  
js/object/private.1621821287.txt.gz · 最終更新: 2021/05/24 10:54 by y2sunlight