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