修改函数表达式中的 class 变量

Modifying class variable in function expression

我有一些 class 变量,我想在下面的函数中修改这些变量,但值似乎不固定。

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;

您必须阅读一些有关变量范围和赋值的内容:您必须了解 variable/name 和它指向的对象之间的区别。

你不需要这句话

lat = latitude;

而不是那个

试试这个:

myLatitude=latitude;

当您编写 var lat = this.myLatitude 时,您创建了新的自变量。 lat 不是 link 到 this.myLatitude 的值,因为它有一个原始值。只有 JavaScript 中的对象通过引用传递。

因此,在您的情况下,您可以在 getCurrentPosition 方法调用之前和以这种方式更改值后将 link 保存到上下文 var self = this self.myLatitude = latitude

或者你可以使用箭头函数:

navigator.geolocation.getCurrentPosition(position => {
  ...
  this.myLatitude = latitude;
  ...
}

你可以在 ES6 class constructor 中定义 属性 myLatitude 并且在你的简洁方法 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();