Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

javascript defineProperty to make an attribute non enumerable

I'm trying to use defineProperty to made attributes not appear in for...in cycle, but it doesn't work. Is this code correct?

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);
}
like image 582
Naigel Avatar asked Apr 22 '12 16:04

Naigel


1 Answers

Item does not have a property named nonEnum (check it out). It is a (constructor) function that will create an object that has a property called nonEnum.

So this one would work:

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

You could also write this function like this:

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

jsFiddle Demo

like image 189
kapa Avatar answered Nov 15 '22 04:11

kapa