このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
js:object:private [2021/05/24 09:11] y2sunlight [プライベートメンバの定義] |
js:object:private [2021/05/31 12:36] (現在) tanaka |
||
---|---|---|---|
行 10: | 行 10: | ||
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; | ||
行 48: | 行 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:// | ||
\\ | \\ | ||
+ | |||