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

为什么JS类实例的prototype属性为undefined却关联类的prototype?

问题核心原因

prototype 是函数(含class类构造函数)的专属属性,普通对象(包括类的实例)本身不存在这个自有属性,所以访问killerRabbit.prototype返回undefined是符合JS规范的正常表现。

当你用new Rabbit()生成实例时,JS会自动给实例绑定一个内部的[[Prototype]]指针,这个指针指向的就是Rabbit.prototype对象,而Object.getPrototypeOf()就是用来读取对象内部的[[Prototype]]指向的,所以你代码里的相等判断返回true。

原型属性的访问方式
  • 如果你只是要调用、读取原型上的属性/方法,直接通过实例访问即可,JS的原型链查找机制会自动向上遍历原型链找对应属性,不需要手动获取原型对象,比如你可以直接执行:
killerRabbit.speak("run!") // 会自动调用Rabbit.prototype上的speak方法
  • 如果你确实需要获取实例关联的原型对象本身做修改、查询操作,统一用标准API Object.getPrototypeOf(实例)即可,比如:
const proto = Object.getPrototypeOf(killerRabbit)
console.log(proto === Rabbit.prototype) // true
// 也可以直接操作原型属性
proto.age = 2
console.log(killerRabbit.age) // 2

注意:不要用非标准的__proto__属性访问原型,该属性仅作为浏览器兼容保留,不符合ECMA标准规范,生产环境不要使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:24:02