修改函数表达式中的 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();
我有一些 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();