可以这样做:
var o = {
_foo : "bar",
get Foo() { return _foo; },
set Foo(value) { _foo = value; }
};
但是我的代码是在构造函数中定义的,所以我想要这样的东西:
function Something(defaultFoo) {
var _foo = defaultFoo;
get Foo() { return _foo; }; // invalid syntax
set Foo(value) { _foo = value; }; // invalid syntax
}
var something = new Something("bar");
console.log(something.Foo);
该语法无效。有一些有效的变体吗?
您可以使用原型属性并分配 setter 和 getter。
顺便说一句,您需要使用
_foo
作为属性,而不是局部变量。
function Something(defaultFoo) {
this._foo = defaultFoo;
}
Object.defineProperty(Something.prototype, 'foo', {
get: function() {
return this._foo;
},
set: function(value) {
this._foo = value;
}
});
var something = new Something("bar");
console.log(something.foo);
something.foo = 'baz';
console.log(something.foo);
您可以将这两种想法与
Object.defineProperty
结合起来:
function Something(defaultFoo) {
var _foo = defaultFoo;
Object.defineProperty(this, "Foo", {
get: function() { return _foo },
set: function(value) { _foo = value }
});
}
但是请确保始终如一地引用
_foo
,而不是 this._foo
,因为你从未定义过它。
或者,使用 ES6 类表示法(以及自 ES2020 以来添加的私有字段),您可以执行此操作 - 在这里,我将值存储在私有
#foo
字段中:
class Something {
#foo
constructor(defaultFoo) {
this.#foo = defaultFoo;
}
get Foo() { return this.#foo; }
set Foo(value) { this.#foo = value; }
}