我在 Es6 类中遇到了一个关于 getter 和 setter 的奇怪问题。我想在 getter 属性上应用 memoization 的概念,一切似乎都很完美,但不是在严格模式下。
'use strict';
class obj {
get name(){
//memozation
delete this.name;
return this.name = "Ahmad";
}
}
const o1 = new obj();
console.log(o1.name);
#output:未捕获的 TypeError:设置 getter-only 属性“name”
我尝试使用普通的 javascript 对象字面量实现相同的代码,并且效果很好:
'use strict';
const x1 = {
get name(){
//memozation
delete this.name;
return this.name = "Ahmad";
}
}
console.log(x1.name); //#output: Ahmad
但在我发布这个问题之前,您可能想知道我是否尝试过使用 setter,事实上,是的,这实际上是 MDN HERE 上提到的内容,
但问题是,即使在使用 setter 之后,我也会看到另一个奇怪的问题:这是带有 setter 的代码:
'use strict';
class obj {
get name(){
//memozation
delete this.name;
return this.name = "Ahmad";
}
set name(value){
this.name = value;
}
}
const o1 = new obj();
console.log(o1.name);
#output:未捕获错误:未定义
请注意:我正在使用严格模式,并且正在 Mozilla firefox 上调试我的代码。
我该如何解决这个问题?这是什么原因呢?
森林海
相关分类