我们有一个 Obj1 的实例。该实例具有名称和年龄属性。当我们打印 obj1 时,它返回该对象的实例属性,仅返回名称,而不返回年龄。然而,Obj1 的原型也有一个属性 Age,并且该属性不能通过 obj1 的实例直接访问。
代码语言:javascript复制function obj1(){
this.name= "myName";
}
obj1.prototype.age = 10;
const i = new obj1();
console.error(i);
// obj1 { name: 'myName' }
但是当我们使用 for...in 循环时。
代码语言:javascript复制for(let prop in i){
console.error(prop);
}
// name and age both property is present
for...in 循环的问题在于它不仅返回对象的实例属性,还返回它通过原型继承的所有属性。
代码语言:javascript复制// 解决方案:我们可以使用 hasOwnProperty 方法来判断实例属性。
for(let prop in i){
if(i.hasOwnProperty(prop)) console.error(prop);
}
我正在参与 2023 腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!