这个关键字vs jj中的obj名称

时间:2013-07-29 13:35:02

标签: javascript this

想知道下面两个代码有什么区别。在第一种情况下,我使用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);
    }
};
});
})();

3 个答案:

答案 0 :(得分:1)

this指的是函数的上下文/范围,因此根据您调用它的方式,它可以引用appwindow或许多其他范围...... < / p>

app是指实际应用对象(如果该对象存在于该范围内)。

答案 1 :(得分: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是您刚刚创建的对象。

答案 2 :(得分:-1)

是的,有区别。如果你想拥有更多的app对象实例(例如,你可以用jQuery.extend()克隆它),你需要使用第二个变量来正确工作。