1

Javascript でのオブジェクト指向プログラミングについて頭を悩ませようとしていますが、次の問題にぶつかりました: (これは、Stoyan Stefanov の本にあるものの単純化された例です)

Dog オブジェクトを作成するためのコンストラクター関数を作成します。

function Dog(){
this.tail = true;
}

次に、Dog コンストラクター関数を使用してオブジェクトをインスタンス化します。

var benji = new Dog();

次に、新しいプロパティを Dog のプロトタイプ オブジェクトに割り当てます。

Dog.prototype.shout = 'Woof!';

これで、ベンジーは期待どおり、両方の尻尾とシャウトにアクセスできるようになりました。Dog のプロトタイプを上書きするまでは問題ありません。

Dog.prototype = {paw : 4};

これで、benji.paw が undefined になります。私の質問は、ベンジーも新しいプロトタイプ オブジェクトにアクセスできるべきではないということです。さらに困惑するのは、プロトタイプ オブジェクトが再定義された後に Dog の新しいインスタンスを作成するときです。

var lucy = new Dog();

lucy.paw は 4 に評価されます。lucy のコンストラクター オブジェクトの定義は、benji のものとは異なるようです。私はここで何が起こっているのか非常に混乱しています.オブジェクトのjavascriptのメモリモデルがどのように機能するかを誰かが説明できますか? ありがとう。

4

1 に答える 1

0

prototypeは単なるオブジェクトです。

もしあなたがそうするなら

var oldProto = Dog.prototype

上書きする前に

Dog.prototype = { paws: 4 }

次に、その子の操作に古いプロトタイプ オブジェクトを使用できます。

oldProto.teeth = true—> benji.teeth == true.

于 2012-06-06T09:32:50.320 に答える