为何修改构造函数原型属性后,实例对象未显示该属性?
构造函数原型属性未在控制台实例输出中显示的原因
你写的代码没问题,numLegs确实已经被blueBird和redBird继承了,控制台直接打印实例时没显示这个属性,是因为控制台默认只展示实例的自身属性,原型上的属性不会直接列出来,但这不代表实例访问不到它。
你可以直接执行下面的代码验证:
console.log(blueBird.numLegs); // 输出:2
关键知识点:
- 自身属性:构造函数里用
this定义的属性(比如name、color),直接挂载在实例对象上,控制台打印时会直接展示。 - 原型属性:挂载在构造函数
prototype上的属性(比如numLegs),属于原型链的一部分,实例通过原型链间接访问,默认不会在控制台的实例对象表层显示。
如果想在控制台看到原型属性,你可以展开实例对象的[[Prototype]](部分浏览器显示为__proto__),就能找到numLegs了。
另外也可以用两个方法验证属性的来源:
// 验证是否是实例自身属性,返回false console.log(Object.hasOwn(blueBird, 'numLegs')); // 验证实例是否能访问该属性,返回true console.log('numLegs' in blueBird);
内容的提问来源于stack exchange,提问作者chuchomp
相关产品推荐
相关产品推荐

