このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
js:object:private [2021/05/17 13:23] tanaka [プライベートメンバの定義] |
js:object:private [2021/05/31 12:36] (現在) tanaka |
||
---|---|---|---|
行 9: | 行 9: | ||
<sxh javascript; | <sxh javascript; | ||
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 | + | 特権メソッドとは、クラスのプライベートメンバにアクセスできるメソッド(クロージャ)の事です。特権メソッド自体はクラス内のパブリックメンバや他のインスタンスからアクセス出来るので、内部のプライベートメンバと外部との橋渡し的存在となります。 \\ |
+ | |||
+ | 特権メソッドはアクセッサ―と呼ばれることがあり、プライベートメンバを取得するゲッターメソッドと、設定するセッターメソッドに分かれます。上例では '' | ||
+ | |||
+ | * getRadius() ・・・ ゲッターメソッド | ||
+ | * setRadius() ・・・ セッターメソッド | ||
\\ | \\ | ||
===== Object.defineProperty ===== | ===== Object.defineProperty ===== | ||
- | > TODO | + | 上例の様に特権メソッド(クロージャ)を使用して、アクセッサを実装する代わりに、'' |
+ | |||
+ | <sxh javascript; | ||
+ | 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); | ||
+ | </ | ||
+ | |||
+ | 詳しくは[[https:// | ||
\\ | \\ | ||
+ | |||