gpt4 book ai didi

javascript - 用 defineProperty 替换原型(prototype)上的 __defineGetter__ 和 __defineSetter__

转载 作者:行者123 更新时间:2023-11-30 08:59:07 27 4
gpt4 key购买 nike

我目前使用以下语法来定义具有 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)
});

但它不起作用。

最佳答案

在您运行 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) 部分,它应该可以正常工作。

关于javascript - 用 defineProperty 替换原型(prototype)上的 __defineGetter__ 和 __defineSetter__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10851776/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com