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

为什么Object.create传入构造函数时无法调用其定义的原型方法?

错误原因

你的代码有两个核心错误导致无法运行:

  • Object.create传参不符合预期
    Object.create()的作用是创建一个新对象,且将新对象的隐式原型(内部[[Prototype]]属性)指向你传入的参数。你错误传入了构造函数Person本身,而非实例需要继承的Person.prototype对象,导致rein的原型链上根本没有挂载了calAge方法的Person.prototype,自然找不到这个方法。
  • 错误访问普通对象的prototype属性
    prototype是仅函数对象才具备的特殊属性,你创建的rein是普通实例对象,本身不存在prototype属性,因此rein.prototype的取值是undefined,调用undefined.calAge()直接抛出类型错误。

可正常运行的修正写法

你可以选择两种常用方案实现需求:

方案1:使用new关键字调用构造函数(推荐)

const rein = new Person("Rein", 1945);
rein.calAge(); // 输出76

方案2:使用Object.create手动创建实例

// 传入Person.prototype作为新对象的原型
const rein = Object.create(Person.prototype);
rein.name = "Rein";
rein.birthday = 1945;
// 直接调用方法即可,会顺着原型链找到Person.prototype上的calAge
rein.calAge(); // 输出76

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:57:07