为什么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
相关产品推荐
相关产品推荐

