我们应该使用.prototype而不是当前的instanciation方法吗?

时间:2015-12-17 10:17:38

标签: javascript oop prototype

在JavaScript代码中,我们目前使用Method1创建了很多对象(参见代码)。使用Method2会更好吗? (使用.prototype)有什么好处? (对执行速度和内存使用情况特别感兴趣。)

   var exampleObjectFunction1 = function(){ alert(this.exampleProperty1);};
   var exampleObjectFunction2 = function(){ this.myFunction1(); };
   var exeampleProperties = {
       exampleProperty1: 'example',
        exampleProperty2: 'example',
    };

   //Method1: Current instanciation method
   function exampleObject1(properties) {
       this.exampleProperty1 = properties.property1;
       this.examplePropertyX = properties.propertyX;
       this.exampleObjectFunction1 = exampleObjectFunction1;
       this.exampleObjectFunction2 = exampleObjectFunction2;
   };
   var exampleObject1 = new exampleObject(properties);

   //Method2: Using prototype (better?)
   function exampleObject2(properties) {
       this.exampleProperty1 = properties.property1;
       this.examplePropertyX = properties.propertyX;
   };
   exampleObject2.prototype.exampleObjectFunction1 = exampleObjectFunction1;
   exampleObject2.prototype.exampleObjectFunction2 = exampleObjectFunction2;

   var exampleObject2 = new exampleObject2(properties);

编辑:我看到很多“构造函数与原型”的比较。但是那里的“构造函数”代码通常会重新定义构造函数中的函数,而我在可重用变量中预定义它们。我认为这是一个不同的方案,但我不太确定它是否更接近“原型”或“构造函数”。

1 个答案:

答案 0 :(得分:2)

假设您创建了1000个exampleObject1对象和1000个exampleObject2对象。

如果要覆盖所有exampleObject1对象的exampleFunction1,则必须遍历所有对象并进行更改。

如果要对所有exampleObject2对象执行此操作,只需在一个位置更改它的原型。

因此,从代码扩展性的角度来看,使用原型更好的选择。