使用object literal定义构造函数原型

时间:2011-01-31 06:33:35

标签: javascript object prototype constructor object-literal

下面哪种方法最好定义构造函数原型以及为什么?

方法1:

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

方法2:

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

我最关心的是速度。谢谢!

4 个答案:

答案 0 :(得分:2)

我想说不会有太大差别。如果你在构造函数中分配原型,那么使用对象文字来分配给Object.prototype是不可能的(有时可能会有用)。

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

答案 1 :(得分:0)

var example = new MyConstructor();
方法1下的

example.constructor === MyConstructor;
方法2下的

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

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

性能差异很小。因为constructor是如此脆弱,你不能真正相信它,所以我不打算保留它。

答案 2 :(得分:0)

您应该使用方法1 。使用方法2 ,每次创建实例时,您都将重新创建"方法,因为它们在构造函数中。

答案 3 :(得分:-1)

进一步说明代码的可读性,

方法1优于方法2。

方法2再花一次缩进。因此,阅读代码会造成困难。

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

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

谢谢!