求助:Uncaught TypeError: obj2.getName is not a function问题排查
问题解决:Uncaught TypeError: obj2.getName is not a function
错误的核心原因是原型属性拼写错误——你在定义obj2时写的_proto_是错的,JavaScript中对象的原型属性是__proto__(前后各两个下划线)。这个拼写失误导致obj2没有成功继承obj的方法,自然找不到getName函数。
修正后的代码
const obj = { name: "John", getName: function() { return this.name } } console.log("Type", typeof(obj.getName())) const obj2 = { roll: 2, desig: "Software developer", name : "Peter", __proto__: obj // 修正为双下划线的__proto__ } console.log(obj2.getName()) // 输出 "Peter"
额外提示:更规范的原型继承写法
虽然__proto__可以用,但现代JavaScript更推荐用以下两种方式设置原型,兼容性和规范性更好:
- 使用
Object.create()创建带指定原型的对象:const obj2 = Object.create(obj, { roll: { value: 2, writable: true }, desig: { value: "Software developer", writable: true }, name: { value: "Peter", writable: true } }); - 先创建对象再设置原型:
const obj2 = { roll: 2, desig: "Software developer", name : "Peter" }; Object.setPrototypeOf(obj2, obj);
内容的提问来源于stack exchange,提问作者Manish
相关产品推荐
相关产品推荐

