2008年05月30日

メソッドのオーバーライドの件

JavaScriptで、メソッドのオーバーライドを行うには、次のようにするといいそうです。
var Parent = function (name, age) {
this.name = name;
this.age = age;
}
var Child = function (name, age, gender) {
Parent.apply(this, arguments);
this.gender = gender;
}
Child.prototype = new Parent();
もしくは
var Child = function (name, age, gender) {
Parent.call(this, name, age);
this.gender = gender;
}
Child.prototype = new Parent();
で。
applyとcallは「別のオブジェクトのメソッドを異なるオブジェクト(呼び出すオブジェクト)のコンテキスト内において適用します。」ですって。

apply か call を使わないと次のようになるようです。
var Child = function (name, age, gender) {
this.base = Parent;
this.base(name, age);
this.gender = gender;
}
Child.prototype = new Parent();




ここでまたthisです。
var Child = function (name, age, gender) {
Parent(name, age);
}
Child.prototype = new Parent();
としてしまうと、Parentを呼び出した文脈(コンテキスト)でthisが解釈されてしまいます。このまま
var c1 = new Child('hoe', 10, 'male');
とChildを呼び出すと、文脈はグローバルオブジェクト、つまりwindowになってしまいます。
結果、
alert(window.name + '::' + window.age); //-> 'hoe::10'
です。

thisって奴ぁ…。
posted by ほえ at 16:44| Comment(0) | TrackBack(0) | JavaScript | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。