You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何构造函数的prototype可见,实例beagle的prototype却返回undefined?

问题与代码示例

示例代码

function Dog(name) {
  this.name = name;
}
Dog.prototype = {
  constructor: Dog,
  age: 16,
  eat: function() {
    console.log('this function works')
  }
}

let beagle = new Dog("Snoopy");

console.log(Dog.prototype);
console.log(beagle.prototype);
beagle.eat();

疑问

运行上述JavaScript代码后,控制台输出构造函数Dog的prototype,但输出实例beagle的prototype时返回undefined;调用beagle.eat()却能正常输出'this function works'。请问为何beagle的prototype为undefined,却仍能调用原型上的eat()方法?


解答

  • prototype是构造函数专属的属性,只有函数才有这个属性,用来指向该构造函数的原型对象。而beagle是构造函数Dog创建出来的实例对象,它本身并没有prototype属性,所以打印beagle.prototype会得到undefined。
  • 实例对象能访问原型上的方法,靠的是原型链机制:每个实例对象内部都有一个隐藏的[[Prototype]]属性(可以通过Object.getPrototypeOf(beagle)或者非标准的__proto__访问),这个属性指向它的构造函数的原型对象(也就是Dog.prototype)。
  • 当你调用beagle.eat()时,JS引擎会先在beagle自身的属性里找eat方法,找不到的话,就会顺着[[Prototype]]指向的原型对象继续查找,直到找到该方法或者到达原型链顶端(null)。这里刚好在Dog.prototype上找到了eat方法,所以能正常执行。

内容的提问来源于stack exchange,提问作者Aren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 07:36:33