javascript对象中未定义函数
我试图调用一个使用回调和面向对象的javascript处理GoogleAPI的方法,但是调用函数时,我一直遇到一个未定义的错误 js: 错误:引用错误:未定义初始化javascript对象中未定义函数,javascript,google-maps,callback,Javascript,Google Maps,Callback,我试图调用一个使用回调和面向对象的javascript处理GoogleAPI的方法,但是调用函数时,我一直遇到一个未定义的错误 js: 错误:引用错误:未定义初始化 发生这种情况的原因是什么?主要问题是createMap引用了一个未定义的符号: ,createMap: function(){ navigator.geolocation.getCurrentPosition(initialize); // Here ---------------------------------
发生这种情况的原因是什么?主要问题是
createMap
引用了一个未定义的符号:
,createMap: function(){
navigator.geolocation.getCurrentPosition(initialize);
// Here ---------------------------------^
}
与Java或C#不同,JavaScript对当前实例上的方法没有隐含的this
。您必须指定它
现在,由于generateMap
是一个单例,并且initialize
在任何地方都不使用this
,您可以这样更正它:
,createMap: function(){
navigator.geolocation.getCurrentPosition(generateMap.initialize);
}
同样,这只适用于generateMap
是一个单例,并且initialize
不使用this
在一般情况下(如果不是单例,或者使用了
initialize
this
),您将管理this
:
此代码:
callbacks.add(
generateMap.createMap
);
…将向回调列表添加对createMap
函数的引用,但该函数不以任何方式绑定到generateMap
对象。因此,当调用它时,这个
将不会引用generateMap
(除了结束它之外,但我们在这里再次假设我们不是在处理单例)。您可以使用ES5的函数#bind
或jQuery的$来解决这个问题
callbacks.add(
generateMap.createMap.bind(generateMap)
);
// or
callbacks.add(
$.proxy(generateMap.createMap, generateMap)
);
这些函数中的每一个都创建了一个函数,当调用该函数时,该函数将在调用过程中返回并调用createMap
makingthis=generateMap
然后在createMap
中,我们以类似的方式修复initialize
事件:
,createMap: function(){
navigator.geolocation.getCurrentPosition(this.initialize.bind(this));
}
// or
,createMap: function(){
navigator.geolocation.getCurrentPosition($.proxy(this.initialize, this));
}
更多关于JavaScript中的的信息,请访问我的博客:
,createMap: function(){
navigator.geolocation.getCurrentPosition(this.initialize.bind(this));
}
// or
,createMap: function(){
navigator.geolocation.getCurrentPosition($.proxy(this.initialize, this));
}