首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在构造函数中定义get/set

在构造函数中定义get/set
EN

Stack Overflow用户
提问于 2017-05-27 09:04:58
回答 2查看 6K关注 0票数 8

这是可以做到的:

代码语言:javascript
运行
复制
var o = {
  _foo : "bar",
  get Foo() { return _foo; },
  set Foo(value) { _foo = value; }
};

但是我的代码是在构造函数中定义的,所以我想要如下所示:

代码语言:javascript
运行
复制
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);

这个语法无效。有什么变化吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-27 09:14:00

您可以使用prototype属性并分配setter和getter。

顺便说一句,您需要使用_foo作为属性,而不是局部变量。

代码语言:javascript
运行
复制
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);

票数 8
EN

Stack Overflow用户

发布于 2017-05-27 09:09:27

您可以将这两种想法与Object.assign结合起来。

代码语言:javascript
运行
复制
function Something(defaultFoo) {
  var _foo = defaultFoo;
  Object.assign(this, {
      get Foo() { return _foo; },
      set Foo(value) { _foo = value; }
  });
}

但是,请确保始终这样引用_foo,而不是以this._foo的形式引用,因为您从未定义过这一点。

或者,使用ES6类表示法,您可以这样做--在这里,我将值存储在this._foo中。

代码语言:javascript
运行
复制
class Something {
    constructor(defaultFoo) {
        this._foo = defaultFoo;
    }
    get Foo() { return this._foo; }
    set Foo(value) { this._foo = value; }
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44214980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档