[英]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.