我正在尝试使用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);
}

最佳答案

Item没有名为nonEnum(check it out)的属性。这是一个(构造函数)函数,它将创建一个具有名为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 Demo

10-04 19:47