为什么通过原型链修改属性没生效?

朱莉的笔记 阅读 4

我试着通过原型给实例对象添加一个方法,但调用的时候报错了,说不是函数。明明在构造函数的 prototype 上定义了啊,是不是哪里搞错了?

这是我的代码:

<script>
function Person(name) {
  this.name = name;
}
Person.prototype.sayHi = function() {
  console.log('Hi, ' + this.name);
};

const p = new Person('小明');
p.sayHi(); // 报错:p.sayHi is not a function
</script>
我来解答 赞 7 收藏
二维码
手机扫码查看
1 条解答
❤依珂
❤依珂 Lv1
这段代码本身没问题,应该能跑。报错可能是代码执行顺序的问题——确保 p.sayHi() 是在 Person.prototype.sayHi 定义之后才调用。

如果你在控制台分段执行,先 new Person('小明') 再定义 sayHi,那就会报错,因为实例已经创建了,原型链那时候还没这个方法。

检查一下你的代码是不是分块写的,把定义放在调用前面试试。
点赞
2026-03-14 05:00