javascript - ES5或ES6中对象嵌套属性的Getter和Setter的简明定义

标签 javascript

我需要为 JavaScript 中的嵌套对象创建 getter 和 setter。 目前我在下面的代码中使用Object.defineProperty()

针对 ES5 或 ES6。

我愿意

  • 您知道一种更简洁的方式(或更好的替代方法)来编写此内容吗?
  • 在 getter 和 setter 属性上使用 .bind(base) 的替代解决方案。

        var base = {
            _name: 'default',
            _properties: {
                _top: 0
            },
            constructor: function () {
            }
        };

        Object.defineProperty(base, 'name', {
            get: function () {
                return this._name;
            },
            set: function (value) {
                this._name = value;
            }
        });
        Object.defineProperty(base, 'properties', {
            get: function () {
                return this._properties;
            },
            set: function (value) {
                this._properties = value;
            }
        });
        // nesting properties
        Object.defineProperty(base.properties, 'top', {
            get: function () {
                return this._properties._top;
            }.bind(base),
            set: function (value) {
                this._properties._top = value;
                console.log('WORKS!');
            }.bind(base)
        });

        console.log(base.name);
        base.name = 'Foo';
        console.log(base.name);
        console.log(base.properties.top);
        base.properties.top = 1000;
        console.log(base.properties.top);

最佳答案

是这个主意吗?通过 babel 在 jsbin 上测试并运行 es6。

var base = {
  _name: 'default',
  get name() {
    return this._name;
  },

  set name(n) {
    return this._name = n;
  },

  _properties: {
    _top: 0,
    get top() {
      return this._top;
    },
    set top(t) {
      return this._top = t;
    },

  },

  get properties() {
    return this._properties;
  },

};

或基于类的版本:

class Base {
  constructor() {
    this._name = 'default';
    this._properties = {
      _top: 0,
      get top() { return this._top; },
      set top(val) { return this._top = val; }
    };
  }

  get name() {
    return this._name;
  }

  set name(n) {
    return this._name = n;
  }

  get properties() {
    return this._properties;
  }

}

var b = new Base();

关于javascript - ES5或ES6中对象嵌套属性的Getter和Setter的简明定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33914823/

相关文章:

javascript - 在网页上搜索文本和返回范围

javascript - 如何将下拉列表选择的值添加到数据库?

javascript - 火狐插件 : Access Variable in other File

javascript - 有效估计 : How long to learn .net/javascript

javascript - 如何将 fs.createReadstream 与 fs.promises 一起使用

javascript - 以负延迟调用 setTimeout 可以吗?

php - Firefox 在 Web 应用程序上使用 "restore last session"函数

javascript - 在 Google 表格中将 Unix 纪元时间转换为日期

php - xmlhttp.responseText 可以包含 <script type ="text/javascript src="..."></script> 并加载吗?

javascript - Jquery,未捕获类型错误 : undefined is not a function