だから私は単純なJavascriptクラスを持っています
class MyClass {
constructor(x) {
this.x = x === undefined ? 0 : x;
}
get x() {
return this.x;
}
}
MyClassが作成されたら、xをパラメーターとして渡された値に設定します。この後は変更できないようにしたいので、意図的にセットx()メソッドを作成していません。
ただし、「ゲッターのみを持つプロパティを設定できません」というエラーが発生するため、根本的な欠落があるはずです。
セッターメソッドを作成せずにxに値を割り当てるにはどうすればよいですか?
クラス定義内に不変プロパティ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);
インスタンスプロパティを読み取り専用にする場合は、書き込み不可にします。
class MyClass {
constructor(x) {
Object.defineProperty(this, "x", { value: x || 0 });
}
}
プロパティは、すべてのプロパティがかつての時代にあったため、「単純な」プロパティか、getter/setterプロパティのいずれかです。
プロパティがゲッター/セッタープロパティの場合、プロパティへのall参照はゲッターまたはセッターを通過しますincludeは、ゲッター関数とセッター関数内からです。したがって、プロパティを格納するには、別のプロパティ名または(より良い)Symbolインスタンスを使用する必要があります。
class MyClass
{
constructor(x) {
this.x = x === undefined ? 0 : x;
}
get() {
return this.x;
}
set(x) { return this.x = x;}
}