我对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
对象。我发现initialize
和bindEvents
函数在app
对象范围内运行。但onDeviceReady
范围是什么?
我尝试在onDeviceReady
中编写下一个代码:
console.log(this == document);\\out: false
答案 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);