簡體   English   中英

在函數表達式中修改類變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM