JavaScript自定义对象:函数的上下文

时间:2013-08-14 15:50:21

标签: javascript function this

我对JavaScript没有深入了解,我将改变这种情况。但是JavaScript自定义对象函数的一些逻辑范围对我来说没有任何意义。

例如:它是默认项目模板(适用于Windows Phone 7)的PhoneGap代码的一部分。

var app = {
    initialize: function() {
        this.bindEvents();
    },
    bindEvents: function() {
        document.addEventListener('deviceready', this.onDeviceReady, false);
    },
    onDeviceReady: function() {
        app.receivedEvent('deviceready');
    },
    receivedEvent: function(id) {
        console.log('Received Event: ' + id);
    }
};

它使用对象文字来创建app对象。我发现initializebindEvents函数在app对象范围内运行。但onDeviceReady范围是什么?

我尝试在onDeviceReady中编写下一个代码:

console.log(this == document);\\out: false

1 个答案:

答案 0 :(得分:0)

你的问题在这里发生:

document.addEventListener('deviceready', this.onDeviceReady, false);

当事件发射器调用方法onDeviceReady时,它设置为document的上下文,因为这是侦听器绑定的内容。

您可以使用以下方法修复它:

document.addEventListener('deviceready', this.onDeviceReady.bind(this), false);

或支持旧浏览器的解决方案:

var self = this;
document.addEventListener('deviceready', function() {
    self.onDeviceReady.apply(self, arguments);
}, false);

如果您使用实用程序库下划线,则可以使用交叉浏览器_.bind

document.addEventListener('deviceready', _.bind(this.onDeviceReady.bind, this), false);