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

PUREST

11 | 2005/12 | 01
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 31

Recent Entries

Recent Comments

Recent Trackbacks

Archives

Category

Links

Search

Recommend

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