0

想知道下面两个代码有什么区别。在第一种情况下,我曾经this引用对象,在第二种情况下,我使用对象名称。虽然这两部作品我都想知道两者之间是否有任何真正的区别。

(function() {
var app = {
    init: function () {
        app.addLun('Hello');
    },
    addLun: function(a) {
        console.log(a);
    }
};
});
})();

var app = {
    init: function () {
        this.addLun('Hello');
    },
    addLun: function(a) {
        console.log(a);
    }
};
});
})();
4

3 回答 3

1

this refers to the context/scope of the function, so depending on how you call it, it could refer to app, window, or many other scopes...

app refers to the actual app object if it exists in that scope.

于 2013-07-29T13:37:36.743 回答
0

使用thisapp绝对不一样。拿这个(有点做作)的例子:

var app = {
    init: { 
        foo: function () {
            // Think 'this' is app? 
            this.addLun('Hello');
        }
    },
    addLun: function(a) {
        console.log(a);
    }
};

var app2 = {
    init: { 
        foo: function () {
            app2.addLun('Hello');
        }
    },
    addLun: function(a) {
        console.log(a);
    }
};

app2.init.foo(); // prints Hello
app.init.foo();  // error - no method called addLun

this是当前上下文,app是您刚刚创建的对象。

于 2013-07-29T13:45:06.640 回答
-1

是的,有区别。如果您想拥有更多的应用程序对象的一个​​实例(例如,您可以使用 jQuery.extend() 克隆它),您需要使用第二种变体来进行正确的工作。

于 2013-07-29T13:39:46.773 回答