このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
|
js:object:basic [2021/05/24 13:47] tanaka [Object.defineProperty] |
js:object:basic [2021/07/19 10:58] (現在) y2sunlight [静的プロパティと静的メソッド] |
||
|---|---|---|---|
| 行 55: | 行 55: | ||
| suzuki.name = ' | suzuki.name = ' | ||
| suzuki.greeting(); | suzuki.greeting(); | ||
| + | </ | ||
| + | |||
| + | === メンバーの有無の判定(in演算子) === | ||
| + | |||
| + | in演算子を使って、メンバーの存在の有無を判定することができます。 | ||
| + | |||
| + | <sxh javascript; | ||
| + | console.log(' | ||
| + | console.log(' | ||
| </ | </ | ||
| 行 94: | 行 103: | ||
| console.log(taro.getSchoolName()); | console.log(taro.getSchoolName()); | ||
| </ | </ | ||
| - | \\ | ||
| + | === メンバーの有無の判定(in演算子) === | ||
| - | ===== プライベートメンバの定義 ===== | + | in演算子を使って、メンバーの存在の有無を判定することができます。 |
| - | + | ||
| - | JavaScriptでは他のオブジェクト指向言語と異なり、プライベートメンバを定義する構文がありません。その代わりに[[js: | + | |
| <sxh javascript; | <sxh javascript; | ||
| - | function Circle(radius) { | + | console.log(' |
| + | console.log(' | ||
| + | console.log(' | ||
| + | console.log(' | ||
| - | var _radius; | + | console.log(' |
| - | + | console.log(' | |
| - | // プライベートメソッド(クロージャ) | + | |
| - | 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 | + | |
| </ | </ | ||
| - | \\ | ||
| - | |||
| - | ==== 特権メソッド ==== | ||
| - | |||
| - | 特権メソッドとは、クラスのプライベートメンバにアクセスできるメソッドの事です。即ち、上例の '' | ||
| - | 特権メソッドはアクセッサ―と呼ばれ、プライベートメンバを取得するゲッターメソッド、プライベートメンバを設定するセッターメソッドに分類されます。 | ||
| - | |||
| - | <code javascript> | ||
| - | getRadius ・・・ ゲッターメソッド | ||
| - | setRadius ・・・ セッターメソッド | ||
| - | </ | ||
| \\ | \\ | ||
| - | |||
| - | ===== Object.defineProperty ===== | ||
| - | |||
| - | 上例の様にクロージャ(特権メソッド)を使用して、アクセッサを実装する代わりに、Object.definePropertyメソッドを利用してアクセッサメソッドを実装することもできます。 | ||
| - | |||
| - | <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:// | ||
| - | |||
| - | \\ | ||
| - | |||
| ===== 組み込みオブジェクト ===== | ===== 組み込みオブジェクト ===== | ||