除了成功拼写错误的事实之外,还没有办法确定。
JavaScript 使用“this”的棘手之处在于“this”不是由方法的定义决定的,而是由它的调用方式决定的。
我最近在另一个类似的问题中解释了这一点:
“this”如何影响方法的方法?
例如,我可以定义一个指向您的函数的变量:
var blah = this.onSucess;
blah(); // "this" will be undefined
var bleh = {
test: this.onSuccess
}
bleh.test(); // "this" will be the object literal.
当 getCurrentPosition 调用你的回调函数时,它可能只是直接调用它:
onSuccess(position);
因此没有定义“this”。
你可以做的是传递给它一个包装器/代理函数,该函数有一个闭包引用回到你的 Geolocation 对象,所以它可以调用 this.onSuccess:
function Geolocation(){
this.maximumAge = 3000;
this.timeout = 20;
this.enableHighAccuracy = true
this.geolocation = navigator.geolocation.getCurrentPosition(function (position) {
this.onSucess(position);
},
function (error) {
this.onError(error);
},
{
maximumAge : this.maximumAge,
timeout : this.timeout,
enableHighAccuracy: this.enableHighAccuracy
});
}
正如 David 所展示的那样,一种简便的方法是使用 Function.bind,它返回一个包装函数,就像我描述的那样:
function Geolocation(){
this.maximumAge = 3000;
this.timeout = 20;
this.enableHighAccuracy = true
this.geolocation = navigator.geolocation.getCurrentPosition(this.onSucess.bind(this),
this.onError.bind(this),
{
maximumAge : this.maximumAge,
timeout : this.timeout,
enableHighAccuracy: this.enableHighAccuracy
});
}