2

私は次のものを持っているとしましょう:

var Car = function() {
}
Car.prototype.config = {
    color: 'red'
}
Car.prototype.color = 'red';

var car1 = new Car();
var car2 = new Car();
car1.config.color = 'green';
car1.color = 'green';
console.log(car2.config.color) //green but expected red
console.log(car2.color) //red as expected

プロトタイプオブジェクトのプロパティが「静的」プロパティとして機能する理由を知っている人はいますか?

4

1 に答える 1

3

についてcar2.config.color

のすべてのインスタンスがCar同じプロトタイプを共有し、したがってそのプロトタイプの同じプロパティを共有するため、これは予期されることです。したがって、1 つを変更すると、他のものも変更されます。

実際、それがポイントです。たとえば、すべてのインスタンスに対して1つの一意の関数(関数にはプロトタイプが最もよく使用されます)を持たせることができます。これは安価です。

個別configの が必要な場合は、プロトタイプではなくインスタンスにアタッチします。

についてcar2.color

ご想像のとおりなので、説明する必要はないかもしれませんが、次のようになります。

  • を設定しない場合car.color、そのプロパティを読み取ると、その名前のプロパティが見つかるまでプロトタイプ チェーンが検索されるため、 が返されます'red'
  • を設定car.colorすると、同じプロセスで読み取られ、設定したこのプロパティが返されます
于 2013-11-05T19:44:09.133 に答える