gpt4 book ai didi

javascript - 使用 Object.defineProperties 给出两个属性

转载 作者:行者123 更新时间:2023-11-30 08:10:52 25 4
gpt4 key购买 nike

我正在尝试创建一个对象。但我不明白为什么我的属性 getters setters 不能简单地调用 this.bar。因此,我的 foo 对象似乎以两个属性结束。

这是正确的还是我:

  1. 使用 defineProperties 错误
  2. 没捕获重点

使用 bar 属性创建 foo

var foo = function ()
{
Object.defineProperties(this, {
bar : {
get : function () {return this.barVal},
set : function(value) { this.barVal = value},
enumerable: true,
configurable: true
}
})
};

var o = new foo();
o.bar = "Hello";
console.log(JSON.stringify(o));

//output {"bar":"Hello","barVal":"Hello"}

最佳答案

JSON.stringify 激活 getter 来解析属性。您的 setter 设置了第二个属性,因此您最终会同时看到这两个属性。您需要的是一种存储 foo.bar 的“内部”值的方法,该值不在 foo 本身。

function Foo(){
var secret = {};
Object.defineProperties(this, {
bar: {
get: function( ){ return secret.bar },
set: function(v){ secret.bar = v },
enumerable: true,
configurable: true
}
});
}


var foo = new Foo;
foo.bar = 'Hello';
console.log(JSON.stringify(foo));

关于javascript - 使用 Object.defineProperties 给出两个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10699510/

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