[英]Modifying class variable in function expression
我有一些要在下面的函数中修改的类变量,但该值似乎没有变化。
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}`;
}
lat = latitude; // Hoping to modify myLatitude here
在这里,您将变量名称lat
分配给对象纬度,但没有修改this.myLatitude
。
我想你想做:
this.myLatitude = latitude;
您必须阅读一些有关变量作用域和赋值的知识:您必须了解变量/名称与它所指向的对象之间的区别。
当您编写var lat = this.myLatitude
您将创建新的自变量。 lat
不是this.myLatitude
值的链接,因为它具有原始值。 JavaScript中只有对象是通过引用传递的。
因此,在您的情况下,您可以在getCurrentPosition
方法调用之前和以这种方式更改值self.myLatitude = latitude
之后,保存到上下文的链接var self = this
。
或者,您可以使用箭头功能:
navigator.geolocation.getCurrentPosition(position => {
...
this.myLatitude = latitude;
...
}
你不需要这句话
lat = latitude;
代替那个
尝试这个:
myLatitude=latitude;
您可以在ES6类constructor
定义属性myLatitude
,并在简洁的activate
方法中使用this
关键字获取myLatitude
属性并更改其值。
快速示例:
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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.