8

我正在尝试使用 defineProperty 使属性不出现在 for...in 循环中,但它不起作用。这段代码正确吗?

function Item() {
    this.enumerable = "enum";
    this.nonEnum = "noEnum";
}
Object.defineProperty(Item, "nonEnum", { enumerable: false });

var test = new Item();

for (var tmp in test){
    console.log(tmp);
}
4

1 回答 1

18

Item没有名为的属性nonEnum检查一下)。它是一个(构造函数)函数,它将创建一个具有名为 的属性的对象nonEnum

所以这个会起作用:

var test = new Item();
Object.defineProperty(test, "nonEnum", { enumerable: false });

你也可以这样写这个函数:

function Item() {
    this.enumerable = "enum";
    Object.defineProperty(this, "nonEnum", { 
        enumerable: false, 
        value: 'noEnum' 
    });
}

jsFiddle 演示

于 2012-04-22T16:21:14.477 回答