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

时间:2017-07-27 12:39:14

标签: javascript scope aurelia

我有一些类变量,我想在下面的函数中进行修改,但值似乎没有显示出来。

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}`;
  }

4 个答案:

答案 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();