Water Sunlight

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

ユーザ用ツール

サイト用ツール


js:object:private

差分

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

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

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
js:object:private [2021/05/17 13:23]
tanaka [プライベートメンバの定義]
js:object:private [2021/05/31 12:36] (現在)
tanaka
行 9: 行 9:
 <sxh javascript;title:Example> <sxh javascript;title:Example>
 function Circle(radius) { function Circle(radius) {
 +
   var _radius;   var _radius;
      
 +  // プライベートメソッド(クロージャ)
   var _area = function() {   var _area = function() {
     return _radius * _radius * Math.PI;     return _radius * _radius * Math.PI;
   };   };
      
 +  // パブリックメソッド
   this.setRadius = function(radius) {   this.setRadius = function(radius) {
 +    // プライベートプロパティに設定
     _radius = radius     _radius = radius
   };   };
      
 +  // パブリックメソッド
   this.getRadius = function() {   this.getRadius = function() {
 +    // プライベートプロパティから取得
     return _radius;      return _radius; 
   };   };
      
 +  // パブリックメソッド
   this.getArea = function() {   this.getArea = function() {
 +    // プライベートメソッドにアクセス
     return _area();      return _area(); 
   };   };
行 39: 行 47:
 ==== 特権メソッド ==== ==== 特権メソッド ====
  
-> TODO+特権メソッドとは、クラスのプライベートメンバにアクセスできるメソッド(クロージャ)の事です。特権メソッド自体はクラス内のパブリックメンバや他のインスタンスからアクセス出来るので、内部のプライベートメンバと外部との橋渡し的存在となります。 \\ 
 + 
 +特権メソッドはアクセッサ―と呼ばれることがあり、プライベートメンバを取得するゲッターメソッドと、設定するセッターメソッドに分かれます。上例では ''setRadius()'' や ''getRadius()'' がアクセッサーになります。 
 + 
 +  * getRadius() ・・・ ゲッターメソッド 
 +  * setRadius() ・・・ セッターメソッド  
 \\ \\
  
 ===== Object.defineProperty ===== ===== Object.defineProperty =====
  
-TODO+上例の様に特権メソッド(クロージャ)を使用して、アクセッサを実装する代わりに、''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.1621225423.txt.gz · 最終更新: 2021/05/17 13:23 by tanaka