編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

プロトタイプチェイン・プロトタイプ継承

前提

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()の検索は次の順で行われる。

  • d.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(); // 本来、未定義であるべき

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2012-07-24 (火) 16:00:42 (1769d)