![](/img/trans.png)
[英]How to define the getter function of an array in javascript Object.defineProperty?
[英]How to make dynamic getter with defineProperty in JavaScript?
我想在JavaScript中使用defineProperty
定义动态的getter函数,如下所示。 为了制作一个只读函数,我想使用defineProperty
。 这使我可以在setter函数中引发异常。
但是,getter函数将不起作用。 我认为此getter会动态返回obj
的所有属性。 但事实并非如此。 它总是返回obj["three"]
(最后一个属性)。 是否有任何方法可以使动态吸气剂在JavaScript中返回适当的属性?
var obj = {"one":1, "two":2, "three":3};
var cloned = {};
for (var prop in obj)
{
var getter = makeGetter(prop);
Object.defineProperty(cloned, prop,
{
set: function()
{
throw new UnableRewriteException('original cannot be rewrite');
},
get: function()
{
return obj[prop]
},
enumerable: true
});
}
正如@ paul-s所提到的,您在循环内部存在闭包问题。 一个简单的解决方法:
var obj = {"one":1, "two":2, "three":3};
var cloned = {};
function makeReadOnlyProperty(cloned, obj, prop) {
Object.defineProperty(cloned, prop,
{
set: function()
{
throw new UnableRewriteException('original cannot be rewrite');
},
get: function()
{
return obj[prop]
},
enumerable: true
});
}
for (var prop in obj)
{
makeReadOnlyProperty(cloned, obj, prop);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.