Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript对象中未定义函数_Javascript_Google Maps_Callback - Fatal编程技术网

javascript对象中未定义函数

javascript对象中未定义函数,javascript,google-maps,callback,Javascript,Google Maps,Callback,我试图调用一个使用回调和面向对象的javascript处理GoogleAPI的方法,但是调用函数时,我一直遇到一个未定义的错误 js: 错误:引用错误:未定义初始化 发生这种情况的原因是什么?主要问题是createMap引用了一个未定义的符号: ,createMap: function(){ navigator.geolocation.getCurrentPosition(initialize); // Here ---------------------------------

我试图调用一个使用回调和面向对象的javascript处理GoogleAPI的方法,但是调用函数时,我一直遇到一个未定义的错误

js:

错误:引用错误:未定义初始化


发生这种情况的原因是什么?

主要问题是
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
making
this=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));
}