web-dev-qa-db-ja.com

プロパティを設定できません... getterのみです(javascript es6)

だから私は単純なJavascriptクラスを持っています

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

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

MyClassが作成されたら、xをパラメーターとして渡された値に設定します。この後は変更できないようにしたいので、意図的にセットx()メソッドを作成していません。

ただし、「ゲッターのみを持つプロパティを設定できません」というエラーが発生するため、根本的な欠落があるはずです。

セッターメソッドを作成せずにxに値を割り当てるにはどうすればよいですか?

6
user7446944

クラス定義内に不変プロパティaを作成する場合、JavaScriptが提供するメソッドを使用してこれを行う1つの方法は、これを(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);
1
Randy Casburn

インスタンスプロパティを読み取り専用にする場合は、書き込み不可にします。

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

プロパティは、すべてのプロパティがかつての時代にあったため、「単純な」プロパティか、getter/setterプロパティのいずれかです。

プロパティがゲッター/セッタープロパティの場合、プロパティへのall参照はゲッターまたはセッターを通過しますincludeは、ゲッター関数とセッター関数内からです。したがって、プロパティを格納するには、別のプロパティ名または(より良い)Symbolインスタンスを使用する必要があります。

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

    get() {
        return this.x;
    } 

    set(x) { return this.x = x;}
}
0
Nikolay Vetrov