JavaScriptっぽい。

『JavaScriptっぽい。』の更新情報やJavaScriptに関する日記。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告|
  3. トラックバック(-)|
  4. コメント(-)

継承元のコンストラクタを順々に呼び出す。

【JavaScript】多重に派生されたクラスのコンストラクタで,基底クラスのコンストラクタを呼び出す方法。 なぜ2番目のコードでダメかというと、prototypeを書き換えれば、当然constructorもprototypeの中に含まれるので、派生されたクラスが全部同じconstructorを参照してしまうから。

自分も独力ではスマートな方法は考えつかなかったけど、 KevLinDev - Tutorials - JavaScriptに書いてある方法のとおりやってみたら、あっさり解決してしまった。

ちゃんとconstructorが自分のクラス名と同一になるように書き換えた上で、SubClassにsuperclassプロパティを設けてSuperClassのprototypeを参照させ、そこからSuperClassのconstructorを呼び出してやればよいということですね。


function inherit(subClass, superClass) {
	var Temp = new Function();
	Temp.prototype = superClass.prototype;
	subClass.prototype = new Temp;
	subClass.prototype.constructor = subClass;
	subClass.prototype.superclass = superClass.prototype;
}

function SuperSuperClass() {
	alert("SuperSuperClass Constructor");

	this.p = "supersuperclass";
}

function SuperClass() {
	alert("SuperClass Constructor");
	this.superclass.constructor(); // SuperSuperClassのコンストラクタを呼び出す.

	this.q = "superclass";
}

function SubClass() {
	alert("SubClass Constructor");
	this.superclass.constructor(); // SuperClassのコンストラクタを呼び出す.

	this.r = "subclass";
}

// 継承
inherit(SuperClass, SuperSuperClass);
inherit(SubClass, SuperClass);

var a = new SubClass();
alert(a.p);
alert(a.q);
alert(a.r);
スポンサーサイト
  1. 2005/12/08(木) 22:15:49|
  2. 雑記|
  3. トラックバック:2|
  4. コメント:0
<<トランプ3枚当てスクリプト(その8) | ホーム | トランプ3枚当てスクリプト(その7)>>

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://javascript.blog3.fc2.com/tb.php/29-82825a53

基底クラスコンストラクタ呼び出しの落とし穴

基底クラスのコンストラクタを呼び出す話に関連して。「Graviness Blog」と「JavaScriptっぽい。」で示された解決策には少し問題がある。inherit(SubClass, SuperClass) としたとき、SuperClass 内での t
  1. 2005/12/09(金) 13:42:08 |
  2. Days on the Moon

【JavaScript】多重に派生されたクラスのコンストラクタで,基底クラスのコンストラクタを呼び出す方法 (2)

前回の続き.先ず,3件のトラックバックと解決方法を頂いたことに感謝.以下に時系列で示す.0. 多重に派生されたクラスのコンストラクタで,基底クラスのコンストラクタを呼び出す方法@Graviness Blog1. 基底クラスのコンストラクタを呼び出す@Days on the Moon2. 継承元
  1. 2005/12/11(日) 16:18:33 |
  2. Graviness Blog

PUREST

08 | 2017/09 | 10
Sun Mon Tue Wed Thu Fri Sat
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Recent Entries

Recent Comments

Recent Trackbacks

Archives

Category

Links

Search

Recommend

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。