无法设置属性...它只有吸气(JavaScript的ES6)

问题描述 投票:2回答:4

所以我有一个简单的Javascript类

class MyClass {
    constructor(x) {
        this.x = x === undefined ? 0 : x;
    }

    get x() {
        return this.x;
    }
}

当创建一个MyClass的,我想这是X设置为传过来的参数值。在此之后,我不希望它能够被改变,所以我特意没有取得一组X()方法。

不过,我想我必须失去了一些基本的东西,因为这是给我的“无法设置属性......其中只有吸气”的错误。

我该如何分配,而无需创建setter方法的值对x?

javascript class constructor typeerror getter-setter
4个回答
-2
投票

这里有几个问题。

当您通过get x()你造成this.x导致调用getter方法,将无限递归一个getter因您的get x()this.x

更换你的引用,在这个像这样的代码this.xthis._x

class MyClass {
    constructor(x) {
        this._x = x === undefined ? 0 : x;
    }

    get x() {
        return this._x;
    }
}

现在你的包裹x这是现在_x不会被迷惑了通过this.x吸气剂的调用。


0
投票
class MyClass 
{
    constructor(x) {
        this.x = x === undefined ? 0 : x;
    }

    get() {
        return this.x;
    } 

    set(x) { return this.x = x;}
}

0
投票

如果你想你的类定义中创建一个不可改变的属性a,此操作系统的一种方式与方法的JavaScript给出就是做这个(使用Object.defineProperty())这样做。

class MyClass {
  constructor(x) {
    Object.defineProperty(this, 'a', {
      enumerable: false,
      configurable: false,
      writable: false,
      value: x || 'empty'
    });
  }

}
let o = new MyClass('Hello');

console.log(o.a);
o.a = 'Will not change';
console.log(o.a);

0
投票

如果你想要一个实例属性为只读,然后使之不可写:

class MyClass {
    constructor(x) {
        Object.defineProperty(this, "x", { value: x || 0 });
    }
}

一个属性可以是“简单”属性,因为所有性质在往昔,或getter / setter属性的日子。

当一个属性是一个getter / setter属性,该属性的所有引用都要经过getter或setter,包括来自getter和setter函数内。因此,存储你需要使用一个替代的属性名称或(更好的)一个符号实例的属性。

© www.soinside.com 2019 - 2024. All rights reserved.