1

何が良いですか?

この実装

var Animal = function(){
     this.properties = {};
     for(var key in Animal.prototype.properties) this.properties[key] = Animal.prototype.properties[key];
};
Animal.prototype.properties = {
    name: 'animal'
};

またはこれ

var AnimalV2 = function(){
    this.properties = Object.create(AnimalV2.prototype.properties);
};
AnimalV2.prototype.properties = {
    name: 'animalv2'
};

プロトタイプ プロパティを変更すると、2 番目の実装にのみ影響します。

var dog = new Animal()
var cat = new AnimalV2();

Animal.prototype.properties.name = 'hello world';
AnimalV2.prototype.properties.name = 'hello world';

console.log(dog.properties.name); // 'animal'    
console.log(cat.properties.name); // 'hello world'

ご覧のとおり、dog.properties は Animal.prototype.properties とリンクされていません。パフォーマンスまたはコード品質の点で優れていますか?

4

1 に答える 1

0

さて、最初のケースでは

var Animal = function(){
     this.properties = {};
     for(var key in Animal.prototype.properties)
         this.properties[key] = Animal.prototype.properties[key];
};
Animal.prototype.properties = {
     name: 'animal'
};

すべてのプロパティを反復処理して 1 つずつ割り当てているため、2 番目の Animal.prototype.properties にあるプロパティが増えるほどコストが高くなります。

var AnimalV2 = function(){
     this.properties = Object.create(AnimalV2.prototype.properties);
};
AnimalV2.prototype.properties = {
     name: 'animalv2'
};

新しいオブジェクトを作成し、その [[Prototype]] プロパティを AnimalV2.prototype.properties に割り当てているため、AnimalV2.prototype.properties がいくつのプロパティを持っていても、割り当ては 1 つだけです。

TL;DRパフォーマンスとエレガンスを考えると、2番目の方が良い方法です。

きれいなコードの場合、私はそれらの誰も好きではありません.コンストラクターに常にプロパティを持ち、メソッドのプロトタイプを保持することを好みます.JavaScript以外のプログラマーにとっては単純です. (そしてそれはまたより速くなります)

AnimalV3 = function() {
    this.properties = {
       prop1: 'a',
       prop2: 'b'
    };
}
于 2012-10-04T21:15:50.780 に答える