细节:js 原型对象与for-in 要领罗列的题目

js 原型对象与for-in 要领罗列的题目

原型属性的[[enumerable]]属性与for-in 的罗列题目

有的时刻[[enumerable]]设置成false 时依然会被for-in 要领罗列到。详细情况以下:

function Person(){};

Person.prototype = {
    constructor: Person,
    name: "Oliver"
};
        
var person1 = new Person();
        
Object.defineProperty(person1,"name",{
enumerable: true
})

for (var x in person1){
    console.log(x);
}                                    

这里原型对象存在name 属性,person1 的name 属性enumerable 为true,能够罗列。

function Person(){};

Person.prototype = {
    constructor: Person,
    name: "Oliver"
};
        
var person1 = new Person();
        
Object.defineProperty(person1,"name",{
    enumerable: false
})

for (var x in person1){
    console.log(x);
}

这里原型对象存在name 属性,person1 的name 属性enumerable 为false,也能够罗列。

function Person(){};

Person.prototype = {
    constructor: Person,
};
        
var person1 = new Person();
        
Object.defineProperty(person1,"name",{
    enumerable: true
})

for (var x in person1){
    console.log(x);
}

这里原型对象不存在name 属性,person1 的name 属性enumerable 为true,能够罗列。

function Person(){};

Person.prototype = {
    constructor: Person,
};
        
var person1 = new Person();
        
Object.defineProperty(person1,"name",{
    enumerable: false
})

for (var x in person1){
    console.log(x);
}

这里原型对象不存在name 属性,person1 的name 属性enumerable 为false,不可罗列。

综上所述,原型对象和实例假如都存在同名属性,则不管实例中该属性的[[enumerable]]是true 照样false 都能够被for-in 罗列。

另一方面:

function Person(){};

Person.prototype = {
    constructor: Person,
    name: "Oliver"
};
        
var person1 = new Person();
        
Object.defineProperty(Person.prototype,"name",{
    enumerable: true
})

for (var x in Person.prototype){
    console.log(x);
}

原型对象的属性假如被修改了[[enumerable]],则根据划定规矩返回效果。

function Person(){};

Person.prototype = {
    constructor: Person,
};
        
var person1 = new Person();
        
Object.defineProperty(Person.prototype,"name",{
    enumerable: false
})

for (var x in Person.prototype){
    console.log(x);
}

新竖立的原型对象的属性[[enumerable]],也是根据划定规矩返回效果。

末了,再重申一遍,假如原型对象合实例存在同名属性,不管如何都会被for-in 罗列。

    原文作者:JS菌
    原文地址: https://segmentfault.com/a/1190000004035684
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞