使用 Object.defineProperties 提供两个属性
Using Object.defineProperties gives two properties
我正在尝试创建一个对象。 但我不明白为什么我的财产获取者不能简单地打电话给this.bar
. 因此,我的 foo 对象似乎最终有两个属性。
这是正确的还是我:
- 使用定义属性错误
- 错过了重点
使用 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 以解析属性。您的二传手设置了第二个属性,因此您最终会看到这两个属性。您需要的是一种存储 foo.bar 的"内部"值的方法,而不是 ON 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));
您正在创建两个属性,一个名为"bar",另一个名为"barVal"。 "bar"由defineProperties调用创建,"barVal"由set函数中的this.barVal赋值创建。 它们的可枚举属性都有一个 true 值(您为 varVal 显式设置了它,赋值隐式设置为 barVal),因此它们都由 JSON.stringify 列出。
如果您打算将 barVal 视为不显示在 JSON 或 for-in 枚举中的私有值,则可以将其可枚举属性显式设置为 false:
var foo = function ()
{
Object.defineProperties(this, {
bar : {
get : function () {return this.barVal},
set : function(value) { this.barVal = value},
enumerable: true,
configurable: true
},
barVal : {
value: undefined,
enumerable: false, writable: true, configurable: true
}
})
};
相关文章:
- 交换对象上两个属性的值
- 速度.js动画两个属性时持续时间不同
- JQuery选择:两个属性's值不相等
- 在ramda.js中将两个属性合并在一起
- 如何在培根中合并两个属性.js
- 基于两个属性从 javascript 中的对象数组中获取唯一数组
- 如何连接数组中对象的两个属性以用作ngOptions中的标签
- 在同一持续时间内对两个属性进行动画处理
- 使用 Object.defineProperties 提供两个属性
- 在 javascript 中用函数交换对象的两个属性
- 我可以在 D3 中一次指定两个属性吗?
- 角度“ng-repeat” - 如何仅过滤两个属性
- 我可以有两个属性名称相同的对象吗
- Linq.js:按两个属性(字段)分组
- 在量角器中,通过两个属性选择一个元素
- 如何通过两个属性定义元素
- 转换JSON数组的对象,从两个属性值创建新的属性
- 检查一个元素是否存在两个属性
- Javascript排序有两个属性
- 在单个元素上使用new/isolated作用域的两个属性指令