除了這個事實,成功拼錯了,有沒有辦法肯定呢。
JavaScript使用「this」的棘手問題是,「this」不是由方法的定義決定的,而是由它的調用方式決定的。
How the "this" affected in a method's method?
例如,我可以定義指向你的函數變量:
我在另一個類似的問題最近解釋這個
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」沒有定義。
你可以做的是通過它具有封閉參考回到你的地理位置對象的包裝/代理功能,因此它可以調用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
});
}
這是正確答案!我會很快標記它。謝謝!它有什麼「副作用」? –
不,除了某些瀏覽器需要'Function.prototype的填充。綁定「(如IE8-)。你會在這裏找到更多的信息和代碼:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind – David