- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- JavaScript/OOP/継承/プロトタイプチェイン・プロトタイプ継承 へ行く。
- 1 (2012-07-24 (火) 15:59:37)
プロトタイプチェイン・プロトタイプ継承
前提
var Animal = function() {}; Animal.prototype = { say: function() { alert("I am an Animal"); } }; var Dog = function() {}; Dog.prototype = new Animal; Dog.prototype.say = function() { alert("I am a dog"); }
以上のように親クラスAnimalと子クラスDogを作り、プロトタイプで継承する。
プロトタイプチェイン
var d = new Dog; d.say();
上の場合メソッドsay()の検索は次の順で行われる。
- h.say()
- Dog.prototype.say()
- Animal.prototype.say()
- Object.prototype.say()
親クラスを辿って行き、最終的にObject.prototypeで見つからなければ、終了する。
プロトタイプ継承の注意点
継承のために、
Dog.prototype = new Animal;
ではなく、
Dog.prototype = Animal.prototype;
としてはならない。この場合、DogのprototypeはAnimalのprototypeを<<参照>>する事になるので、
Dog.prototype.foo = function () { alert('foo()'); };
のようにDogにメソッドを追加すると、Animalにもメソッドが追加されてしまう。
var a = new Animal(); a.foo(); // 本来、未定義であるべき