这与在Javascript中的函数参数中定义对象

时间:2014-12-11 01:19:33

标签: javascript

下面你会发现两种不同的装饰模式。一个使用"这个"而另一个定义函数参数中的对象。

定义对象与使用"这个"有什么好处?从记忆/表现的角度来看? 什么时候使用它而不是定义对象?

//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;
            };

1 个答案:

答案 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;
}