我有一些类变量,我想在下面的函数中进行修改,但值似乎没有显示出来。
export class Welcome {
myLatitude = 0; //I want to modify this inside activate()
myLongitude = 0;
myMarkers = [
{
latitude: -27.451673,
longitude: 153.043981
}
];
activate() {
var lat = this.myLatitude; // I thought this was getting a reference to myLatitude.
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position){ //additional function
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
var accuracy = position.coords.accuracy;
lat = latitude; // Hoping to modify myLatitude here
...
但是,当我稍后再次检查myLatitude的值时,它仍然具有值0:
@computedFrom('myLatitude')
get myLat() {
console.log(this.myLatitude);
return `${this.myLatitude}`;
}
答案 0 :(得分:2)
lat = latitude; // Hoping to modify myLatitude here
在此,您将变量名称lat
指定给对象纬度,但不要修改this.myLatitude
。
我想你想做:
this.myLatitude = latitude;
您必须阅读有关变量范围和赋值的一些内容:您必须了解变量/名称与其指向的对象之间的区别。
答案 1 :(得分:2)
当您编写var lat = this.myLatitude
时,您将创建新的自变量。 lat
不是this.myLatitude
值的链接,因为它具有原始值。只有JavaScript中的对象才能通过引用传递。
因此,在您的情况下,您可以在var self = this
方法调用之前保存指向上下文getCurrentPosition
的链接,并以此方式更改值self.myLatitude = latitude
。
或者您可以使用箭头功能:
navigator.geolocation.getCurrentPosition(position => {
...
this.myLatitude = latitude;
...
}
答案 2 :(得分:0)
你不需要这句话
lat = latitude;
而不是那个
试试这个:
myLatitude=latitude;
答案 3 :(得分:0)
您可以在ES6课程myLatitude
中定义属性constructor
,在简明方法activate
中,您可以获得myLatitude
属性并使用this
更改其值关键字。
快速举例:
let Welcome = class Welcome {
constructor(height, width) {
this.myLatitude = 0;
}
activate() {
this.myLatitude = '1'; // assign a new value
alert('this.myLatitude is: ' + this.myLatitude);
}
};
let myWelcome = new Welcome();
myWelcome.activate();