此关键字与javascript中的obj名称

此关键字与javascript中的obj名称,javascript,this,Javascript,This,想知道下面两个代码之间的区别。在第一种情况下,我使用this引用对象,在第二种情况下,我使用对象名称。虽然这两种方法都有效,但我想知道这两种方法之间是否有真正的区别 (function() { var app = { init: function () { app.addLun('Hello'); }, addLun: function(a) { console.log(a); } }; }); })(); 及 此引用函数的上下文

想知道下面两个代码之间的区别。在第一种情况下,我使用
this
引用对象,在第二种情况下,我使用对象名称。虽然这两种方法都有效,但我想知道这两种方法之间是否有真正的区别

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


引用函数的上下文/范围,因此根据您如何调用它,它可以引用
应用程序
窗口
,或许多其他范围


app
指的是实际的app对象,如果它存在于该范围内。

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

使用
应用程序
绝对不同。以这个(稍微做作的)例子:


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

我不确定两个示例中的最后一行是什么。
this
是调用当前函数的上下文
app
是您创建的特定对象。它们在引发语法错误的意义上是等价的。@Evert LOL我看到您发现了与以下相同的问题:-P@Neal:啊,是的,看起来像是:)不。。。。不,我不会用jQuery克隆它。。。
var app = {
    init: function () {
        this.addLun('Hello');
    },
    addLun: function(a) {
        console.log(a);
    }
};
});
})();
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