下面你会发现两种不同的装饰模式。一个使用"这个"而另一个定义函数参数中的对象。
定义对象与使用"这个"有什么好处?从记忆/表现的角度来看? 什么时候使用它而不是定义对象?
//Using this in the object
var carlike = function(loc) {
this.loc = loc;
var move = function() {
this.loc++;
};
this.move = move;
return this;
};
//Defining the object in the arguments
var carlike = function(obj, loc) {
obj.loc = loc;
var move = function(obj) {
obj.loc++;
};
obj.move = move;
return obj;
};
答案 0 :(得分:1)
对于carlike
函数,没有性能差异。但是,正如你所说它是一个装饰器 - 它将被称为对象的静态函数 - 而不是构造函数或方法。您可能希望使用carlike({}, 0)
而不是carlike.call({}, 0)
,因此请使用第二种模式。
对于move
函数,存在内存差异。 obj
模式会创建一个闭包,其成本高于第一个模式中的this
。选择哪一个is a different question,因为它们的行为不同。
如果您希望优化内存消耗,可以通过在move
的每次调用时不创建新的carlike
函数来进一步改进第一个模式。只是做
function move() {
this.loc++;
}
function carlike(obj, loc) {
obj.loc = loc;
obj.move = move;
return obj;
}