这是可以做到的:
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);
这个语法无效。有什么变化吗?
发布于 2017-05-27 09:14:00
您可以使用prototype属性并分配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);
发布于 2017-05-27 09:09:27
您可以将这两种想法与Object.assign
结合起来。
function Something(defaultFoo) {
var _foo = defaultFoo;
Object.assign(this, {
get Foo() { return _foo; },
set Foo(value) { _foo = value; }
});
}
但是,请确保始终这样引用_foo
,而不是以this._foo
的形式引用,因为您从未定义过这一点。
或者,使用ES6类表示法,您可以这样做--在这里,我将值存储在this._foo
中。
class Something {
constructor(defaultFoo) {
this._foo = defaultFoo;
}
get Foo() { return this._foo; }
set Foo(value) { this._foo = value; }
}
https://stackoverflow.com/questions/44214980
复制相似问题