1

我目前使用以下语法来定义一个带有 getter 和 setter 的类。

SomeObject = function() {

  this._propertyOne = 'test';

}

SomeObject.prototype.__defineGetter__('propertyOne', function() {

  return this._propertyOne;

});

SomeObject.prototype.__defineSetter__('propertyOne', function(value) {

  this._propertyOne = value;

});

然后我可以像这样访问该属性:

var o = new SomeObject();
o.propertyOne = 'test2';
console.log(o.propertyOne);

如何使用未弃用的 defineProperty 命令或类似命令实现相同的效果?

我试过这样的事情:

Object.defineProperty(SomeObject.prototype, 'propertyOne', {
  get: function() {

    return this._propertyOne;

  }.bind(this),
  set: function(value) {

    this._propertyOne = value;

  }.bind(this)
});

但它不起作用。

4

1 回答 1

5

在您运行的那一刻Object.defineProperty,该this值不是您想要的,而是window(或您从中运行该片段的对象)。所以这就是实际发生的事情:

Object.defineProperty(SomeObject.prototype, 'propertyOne', {
  get: function() {

    return this._propertyOne;

  }.bind(window),
  set: function(value) {

    this._propertyOne = value;

  }.bind(window)
});

卸下.bind(this)零件,它应该可以正常工作。

于 2012-06-01T14:14:52.020 回答