我想用defineProperty
在JavaScript中定义动态getter函数,如下所示。为了实现只读功能,我想使用defineProperty
。这使我能够在setter函数中抛出异常。
然而,getter函数将不起作用。我认为这个getter动态地返回obj
的任意属性。但事实并非如此,它总是返回obj["three"]
,最后一个属性。是否有任何方法可以使动态getter在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
});
}
发布于 2013-12-22 06:41:38
正如@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);
}
https://stackoverflow.com/questions/20730324
复制相似问题