プロトタイプチェイン・プロトタイプ継承前提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()の検索は次の順で行われる。
親クラスを辿って行き、最終的に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(); // 本来、未定義であるべき |
|