JavaScript自定义对象:函数的上下文
我对JavaScript没有深入的了解,我将改变这种情况。但是JavaScript自定义对象函数作用域的某些逻辑对我来说没有任何意义 例如:它是默认项目模板(适用于Windows Phone 7)中PhoneGap代码的一部分 它使用对象文字来创建JavaScript自定义对象:函数的上下文,javascript,function,this,Javascript,Function,This,我对JavaScript没有深入的了解,我将改变这种情况。但是JavaScript自定义对象函数作用域的某些逻辑对我来说没有任何意义 例如:它是默认项目模板(适用于Windows Phone 7)中PhoneGap代码的一部分 它使用对象文字来创建app对象。我发现initialize和bindEvents函数在app对象范围内运行。但是什么是OnDevicerady的范围 我试图在onDeviceReady中编写下一个代码: console.log(this == document);\\ou
app
对象。我发现initialize
和bindEvents
函数在app
对象范围内运行。但是什么是OnDevicerady的范围
我试图在onDeviceReady中编写下一个代码:
console.log(this == document);\\out: false
你的问题发生在这里:
document.addEventListener('deviceready', this.onDeviceReady, false);
当事件发射器调用方法ondevicerady
时,它将上下文设置为document
,因为侦听器绑定到该上下文
您可以使用以下方法修复它:
document.addEventListener('deviceready', this.onDeviceReady.bind(this), false);
或支持旧浏览器的解决方案:
var self = this;
document.addEventListener('deviceready', function() {
self.onDeviceReady.apply(self, arguments);
}, false);
如果使用工具库下划线,则可以使用跨浏览器:
谈到JavaScript时,您使用的“范围”一词确实不准确。函数的“作用域”与通过属性值与其关联的任何对象无关。我想你说的是上下文,这取决于函数的调用方式。如果您将
console.log()
调用更改为仅输出此
,您将得到您的答案。@Pointy的可能重复项我做了,并得到下一行-System.Collections.Generic.Dictionary的2[System.String,System.Object]
很遗憾,我不清楚。@Pointy您是对的,context
更适合这个词。我知道在“ondevicerady”中是另一个上下文,我知道如何绑定this
,但在我的情况下,我无法得到this是什么?因为console.log(this==文档)\\输出:false
。
var self = this;
document.addEventListener('deviceready', function() {
self.onDeviceReady.apply(self, arguments);
}, false);
document.addEventListener('deviceready', _.bind(this.onDeviceReady.bind, this), false);