无法设置属性。。。其中只有Getter(javascript es6)
所以我有一个简单的Javascript类无法设置属性。。。其中只有Getter(javascript es6),javascript,class,constructor,typeerror,getter-setter,Javascript,Class,Constructor,Typeerror,Getter Setter,所以我有一个简单的Javascript类 class MyClass { constructor(x) { this.x = x === undefined ? 0 : x; } get x() { return this.x; } } 创建MyClass时,我希望它的x设置为作为参数传入的值。在此之后,我不希望它能够被更改,因此我有意不创建set x()方法 然而,我想我一定是遗漏了一些基本的东西,因为这给了我“无法设置属性…
class MyClass {
constructor(x) {
this.x = x === undefined ? 0 : x;
}
get x() {
return this.x;
}
}
创建MyClass时,我希望它的x设置为作为参数传入的值。在此之后,我不希望它能够被更改,因此我有意不创建set x()方法
然而,我想我一定是遗漏了一些基本的东西,因为这给了我“无法设置属性…它只有getter”错误
如何在不创建setter方法的情况下为x赋值 这里有几个问题
class MyClass
{
constructor(x) {
this.x = x === undefined ? 0 : x;
}
get() {
return this.x;
}
set(x) { return this.x = x;}
}
当您通过get x()
创建一个getter时,您正在导致this.x
调用getter,由于您的get x()
执行this.x
,该getter将无限期地递归
将您对this.x
的引用替换为this.\u x
在此代码中,如下所示:
class MyClass {
constructor(x) {
this._x = x === undefined ? 0 : x;
}
get x() {
return this._x;
}
}
现在,您封装的
x
现在是\ux
不会因为通过this.x
调用getter而被混淆。如果您想在类定义中创建一个不可变属性a
,使用JavaScript提供的方法,操作系统可以这样做(使用Object.defineProperty()
)
class-MyClass{
构造器(x){
Object.defineProperty(这是“a”{
可枚举:false,
可配置:false,
可写:false,
值:x | |“空”
});
}
}
设o=newmyclass('Hello');
控制台日志(o.a);
o、 a='不会改变';
控制台日志(o.a)代码>如果希望实例属性为只读,请将其设置为不可写:
class MyClass {
constructor(x) {
Object.defineProperty(this, "x", { value: x || 0 });
}
}
一个属性可以是“简单”属性,就像过去的所有属性一样,也可以是getter/setter属性
当属性是getter/setter属性时,对该属性的所有引用都会通过getter或setter,包括从getter和setter函数中进行引用。因此,要存储属性,您需要使用替代属性名称或(更好的)符号实例。您不能。属性必须是普通属性或getter/setter属性。(我认为;检查规范)您编写的代码也会失败,因为getter中对this.x
的引用将被理解为对getter的函数调用,这意味着无限递归。谢谢!这正是我需要的!