下面哪种方法最好定义构造函数原型以及为什么?
方法1:
MyConstructor.prototype.myFunction1 = function(){};
MyConstructor.prototype.myFunction2 = function(){};
方法2:
MyConstructor.prototype = {
myFunction1: function(){},
myFunction2: function(){}
};
我最关心的是速度。谢谢!
答案 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。
谢谢!