Javascript 用defineProperty替换原型上的定义设置器和定义设置器

Javascript 用defineProperty替换原型上的定义设置器和定义设置器,javascript,Javascript,我目前使用以下语法定义一个包含getter和setter的类 SomeObject = function() { this._propertyOne = 'test'; } SomeObject.prototype.__defineGetter__('propertyOne', function() { return this._propertyOne; }); SomeObject.prototype.__defineSetter__('propertyOne', func

我目前使用以下语法定义一个包含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);
Object.defineProperty(SomeObject.prototype, 'propertyOne', {
  get: function() {

    return this._propertyOne;

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

    this._propertyOne = value;

  }.bind(this)
});
如何使用非弃用的defineProperty命令或类似的命令实现相同的功能

我试过这样的方法:

var o = new SomeObject();
o.propertyOne = 'test2';
console.log(o.propertyOne);
Object.defineProperty(SomeObject.prototype, 'propertyOne', {
  get: function() {

    return this._propertyOne;

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

    this._propertyOne = value;

  }.bind(this)
});
但它不起作用。

在运行Object.defineProperty时,该值不是您想要的值,而是窗口或运行该代码段的对象。这就是实际发生的情况:

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

    return this._propertyOne;

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

    this._propertyOne = value;

  }.bind(window)
});
删除.bindthis部分,它应该可以正常工作。

在运行Object.defineProperty时,该值不是您想要的值,而是窗口或运行该代码段的对象。这就是实际发生的情况:

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

    return this._propertyOne;

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

    this._propertyOne = value;

  }.bind(window)
});
拆下这个部件的.bind,它应该可以正常工作