Water Sunlight

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

ユーザ用ツール

サイト用ツール


js:object:basic

差分

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

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

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
js:object:basic [2021/05/25 09:07]
tanaka [特権メソッド]
js:object:basic [2021/07/19 10:58] (現在)
y2sunlight [静的プロパティと静的メソッド]
行 55: 行 55:
     suzuki.name = 'suzuki taro'; // プロパティの書き込み     suzuki.name = 'suzuki taro'; // プロパティの書き込み
     suzuki.greeting();           // メソッドの呼び出し     suzuki.greeting();           // メソッドの呼び出し
 +</sxh>
 +
 +=== メンバーの有無の判定(in演算子) ===
 +
 +in演算子を使って、メンバーの存在の有無を判定することができます。
 +
 +<sxh javascript;title:Example>
 +console.log('name' in suzuki);     // true
 +console.log('greeting' in suzuki); // true
 </sxh> </sxh>
  
行 94: 行 103:
 console.log(taro.getSchoolName()); // NG (taro.getSchoolName is not a function) console.log(taro.getSchoolName()); // NG (taro.getSchoolName is not a function)
 </sxh> </sxh>
-\\ 
  
 +=== メンバーの有無の判定(in演算子) ===
  
-===== プライベートメンバの定義 ===== +in演算子を使って、メンバ存在有無定することできます。
- +
-JavaScriptでは他オブジェクト指向言語と異なり、プライベートメンバを定する構文ありません。その代わりに[[js:function:closure|クロージャ]]を使用します。+
  
 <sxh javascript;title:Example> <sxh javascript;title:Example>
-function Circle(radius{+console.log('name' in taro);             // true 
 +console.log('greeting' in taro);         // true 
 +console.log('age' in taro);              // false 
 +console.log('getSchoolName' in taro);    // false
  
-  var _radius; +console.log('age' in Student);           // true 
-   +console.log('getSchoolName' in Student); // true
-  // プライベートメソッド(クロージャ) +
-  var _area = function() { +
-    return _radius * _radius * Math.PI; +
-  }; +
-   +
-  // パブリックメソッド +
-  this.setRadius = function(radius) { +
-    // プライベートプロパティに設定 +
-    _radius = radius +
-  }; +
-   +
-  // パブリックメソッド +
-  this.getRadius = function() { +
-    // プライベートプロパティから取得 +
-    return _radius;  +
-  }; +
-   +
-  // パブリックメソッド +
-  this.getArea = function() { +
-    // プライベートメソッドにアクセス +
-    return _area();  +
-  }; +
- +
-  this.setRadius(radius); +
-+
- +
-var a = new Circle(10); +
- +
-console.log(a.getRadius());  // 結果:10 +
-console.log(a.getArea());    // 結果:314.1592653589793+
 </sxh> </sxh>
-\\ 
- 
-==== 特権メソッド ==== 
- 
-特権メソッドとは、クラスのプライベートメンバにアクセスできるメソッド(クロージャ)の事です。特権メソッド自体はクラス内のパブリックメンバや他のインスタンスからアクセス出来るので、内部のプライベートメンバと外部との橋渡し的存在となります。 \\ 
- 
-特権メソッドはアクセッサ―と呼ばれることがあり、プライベートメンバを取得するゲッターメソッドと、設定するセッターメソッドに分類されます。上例では ''setRadius()'' や ''getRadius()'' がアクセッサーになります。 
- 
-  * getRadius() ・・・ ゲッターメソッド 
-  * setRadius() ・・・ セッターメソッド  
  
 \\ \\
- 
-===== 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/basic.1621901259.txt.gz · 最終更新: 2021/05/25 09:07 by tanaka