1

下面哪种方法最适合定义构造函数原型,为什么?

方法一:

MyConstructor.prototype.myFunction1 = function(){};
MyConstructor.prototype.myFunction2 = function(){};

方法二:

MyConstructor.prototype = {
    myFunction1: function(){},
    myFunction2: function(){}
};

我主要关心速度。谢谢!

4

4 回答 4

2

我会说不会有太大的不同。如果您在构造函数中分配原型(有时这很有用),那么使用对象字面量分配给 Object.prototype 是您无法做到的。

也许您应该使用jsperf.com编写一些性能测试。

于 2011-01-31T08:14:41.360 回答
0
var example = new MyConstructor();

在方法1下:

example.constructor === MyConstructor;

在方法2下:

typeof(example.constructor) === 'undefined';

函数附带的原型对象有一个constructor指向函数的属性。如果您分配给该对象的属性,则保留该constructor属性。如果您prototype用新对象覆盖该属性,则会丢失该constructor属性。

性能差异很小。因为constructor它太脆弱了,你不能真的相信它,所以我懒得去保存它。

于 2011-04-05T02:06:41.593 回答
0

您应该使用方法 1。使用方法 2,每次创建实例时,您都将“重新创建”这些方法,因为它们位于构造函数中。

于 2017-03-15T16:57:29.223 回答
-1

进一步谈到代码的可读性,

方法一优于方法二。

方法 2 多花一个缩进。所以给读码带来了困难。

另外,就我而言,当我们在代码的下部看到函数名称部分时,我无法推断该函数是原型方法还是只是静态成员函数。

就个人而言,总而言之,如果性能没有太大差异,我更喜欢方法 2。

谢谢!

于 2014-04-19T06:10:59.393 回答