下面哪种方法最适合定义构造函数原型,为什么?
方法一:
MyConstructor.prototype.myFunction1 = function(){};
MyConstructor.prototype.myFunction2 = function(){};
方法二:
MyConstructor.prototype = {
myFunction1: function(){},
myFunction2: function(){}
};
我主要关心速度。谢谢!
下面哪种方法最适合定义构造函数原型,为什么?
方法一:
MyConstructor.prototype.myFunction1 = function(){};
MyConstructor.prototype.myFunction2 = function(){};
方法二:
MyConstructor.prototype = {
myFunction1: function(){},
myFunction2: function(){}
};
我主要关心速度。谢谢!
我会说不会有太大的不同。如果您在构造函数中分配原型(有时这很有用),那么使用对象字面量分配给 Object.prototype 是您无法做到的。
也许您应该使用jsperf.com编写一些性能测试。
var example = new MyConstructor();
在方法1下:
example.constructor === MyConstructor;
在方法2下:
typeof(example.constructor) === 'undefined';
函数附带的原型对象有一个constructor指向函数的属性。如果您分配给该对象的属性,则保留该constructor属性。如果您prototype用新对象覆盖该属性,则会丢失该constructor属性。
性能差异很小。因为constructor它太脆弱了,你不能真的相信它,所以我懒得去保存它。
您应该使用方法 1。使用方法 2,每次创建新实例时,您都将“重新创建”这些方法,因为它们位于构造函数中。
进一步谈到代码的可读性,
方法一优于方法二。
方法 2 多花一个缩进。所以给读码带来了困难。
另外,就我而言,当我们在代码的下部看到函数名称部分时,我无法推断该函数是原型方法还是只是静态成员函数。
就个人而言,总而言之,如果性能没有太大差异,我更喜欢方法 2。
谢谢!