クラスの定義
正直色々ありすぎて難しい。
クロージャでやる場合と、プロトタイプでやる場合とに分けられるっぽい。
クロージャによるクラスの定義
- function Calc(x, y)
- {
- this.x = x;
- this.y = y;
- this.add = function()
- {
- return x + y;
- }
- }
- alert(new Calc(1,2).add());
プロトタイプによるクラスの定義その1
- function Calc()
- {
- this.initialize.apply(this, arguments);
- }
- Calc.prototype.x = 0;
- Calc.prototype.y = 0;
- Calc.prototype.initialize = function()
- {
- var o = this;
- o.x = arguments[0];
- o.y = arguments[1];
- }
- Calc.prototype.add = function()
- {
- var o = this;
- return o.x + o.y;
- }
- alert(new Calc(1,2).add()); // 結果 : 3
こちらは、プロトタイプに追加している。
プロトタイプによるクラスの定義2
- function Calc()
- this.initialize.apply(this, arguments);
- }
- Calc.prototype =
- {
- x : 0,
- y : 0,
- initialize : function()
- {
- x = arguments[0];
- y = arguments[1];
- },
- add : function()
- {
- return x + y;
- }
- }
- alert(new Calc(1,2).add()); // 結果3
こちらは、プロトタイプを上書きしている。
こっちのほうがスッキリしてていいけど、これだと継承するときに問題がある。
クラスの継承
クラスにも色々と方法がある。
とりあえず、プロトタイプによる継承の場合、基本的には
- function CalcEx()
- {
- this.initialize.apply(this, arguments);
- }
- CalcEx.prototype = new Calc();
- alert(new CalcEx(3,4).add()); // 結果7
とするわけだけど、継承したクラスを『プロトタイプによるクラスの定義2』の パターンで定義してしまうと、プロトタイプを上書きしてしまうので、 継承元で定義した prototype が消えてしまう。 なので、プロトタイプを利用したクラス定義を行うなら、プロトタイプに追加する パターンが望ましい。
※もっとも、色々な方法でもって、拡張する方法がいくらでも存在する。要勉強
0 件のコメント:
コメントを投稿