在构造函数中定义 get/set
Define get/set in constructor function
可以这样做:
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);
该语法无效。有一些变体有效吗?
您可以将这两种想法与 Object.assign
结合起来:
function Something(defaultFoo) {
var _foo = defaultFoo;
Object.assign(this, {
get Foo() { return _foo; },
set Foo(value) { _foo = value; }
});
}
但是请确保始终如一地引用 _foo
,而不是 this._foo
,因为您从未定义过它。
或者,使用 ES6 class 表示法,您可以这样做——在这里我将值存储在 this._foo
:
class Something {
constructor(defaultFoo) {
this._foo = defaultFoo;
}
get Foo() { return this._foo; }
set Foo(value) { this._foo = value; }
}
您可以使用原型 属性 并分配 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);
可以这样做:
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);
该语法无效。有一些变体有效吗?
您可以将这两种想法与 Object.assign
结合起来:
function Something(defaultFoo) {
var _foo = defaultFoo;
Object.assign(this, {
get Foo() { return _foo; },
set Foo(value) { _foo = value; }
});
}
但是请确保始终如一地引用 _foo
,而不是 this._foo
,因为您从未定义过它。
或者,使用 ES6 class 表示法,您可以这样做——在这里我将值存储在 this._foo
:
class Something {
constructor(defaultFoo) {
this._foo = defaultFoo;
}
get Foo() { return this._foo; }
set Foo(value) { this._foo = value; }
}
您可以使用原型 属性 并分配 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);