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 罗列。