gpt4 book ai didi

javascript - 在另一个方法 JavaScript 中调用一个方法

转载 作者:行者123 更新时间:2023-11-29 21:01:24 25 4
gpt4 key购买 nike

我目前正在学习 JavaScript 中的 OOP。我正在重构一个应用,但遇到了问题。

我创建了一个“天气”类

 class Weather {

constructor({longitude, latitude} = {}) {
this.longitude = longitude;
this.latitude = latitude;
this.options = {
enableHighAccuracy: true,
timeout: 5000,
maximumAge: 0
};
}

getLongitude(){
return this.longitude;
}

setLongitude(longitude){
this.longitude = longitude;
}

getLatitude(){
return this.latitude;
}

setLatitude(latitude){
this.latitude = latitude;
}

getLocation() {
if (Modernizr.geolocation) {
//if locatin is enabled, show position in button
navigator.geolocation.getCurrentPosition(this.success, this.fail, this.options);
} else {
alert("Sorry, you browser doesn't have geolocation");
}
}

success(position){
let pos = position.coords;
console.log('Your actual position is :');
console.log(`Latitude : ${pos.latitude}`);
console.log(`Longitude: ${pos.longitude}`);
console.log(`More or less ${position.coords.accuracy} meters.`);
this.setLongitude(pos.longitude); // <== Doesn't work
this.setLatitude(pos.latitude); // <== Doesn't work

}

fail(){
console.log('User refused to give position');
}
}

一切正常,我可以像那样检索经度和纬度

let City = new Weather();
City.getLocation(); //will call getLocation and on success, it will console.log the longitude and latitude

我的问题是我可以更新对象的值。当我创建我的对象时,如果将它们作为参数传递,构造函数会定义经度和纬度。但是,在成功方法中,我无法重新分配对象的值。

有什么解决办法吗?

最佳答案

您丢失了上下文,因为 success 方法作为引用传递。所以调用时 this 的值并不引用 Weather 实例。您可以使用 Function.prototype.bind 方法来解决这个问题:

class Weather {
...

getLocation() {
if (Modernizr.geolocation) {
//if locatin is enabled, show position in button
navigator.geolocation.getCurrentPosition(
this.success.bind(this),
this.fail,
this.options
);
} else {
alert("Sorry, you browser doesn't have geolocation");
}
}

...
}

或者,您可以在构造函数中绑定(bind)方法,这样 bind 只在对象被实例化时被调用一次。

关于javascript - 在另一个方法 JavaScript 中调用一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46309988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com