在 JavaScript 中,原型修改和原型重写分别指什么操作?它们之间有何区别?
考察说明
考查对 JavaScript 原型机制中修改与重写两个概念的理解及区分。
回答思路
- 【回答框架 1】原型修改是指通过给构造函数的 prototype 对象添加属性或方法来扩展功能,例如 MyClass.prototype.newMethod = function(){},这种方式不会改变原型对象的引用,已创建实例仍能通过原型链访问新增成员。
- 【回答框架 2】原型重写是指将构造函数的 prototype 属性重新赋值为一个新对象,例如 MyClass.prototype = { ... },这会替换整个原型对象,导致之前创建的实例的原型链指向旧对象,无法访问新原型上的成员,而新创建的实例则使用新原型。
- 【回答框架 3】两者的核心区别在于是否改变 prototype 的引用。修改是增量更新,保留原有原型链;重写是整体替换,割裂新旧实例的原型链。重写时若未设置 constructor 属性,会导致 constructor 指向不正确,需要注意修复。
- 【关键点 1】原型修改通过 prototype 对象添加成员,不影响已有实例。
- 【关键点 2】原型重写替换整个 prototype 对象,使旧实例无法访问新成员。
- 【关键点 3】重写后应显式修正 constructor 指向,保持原型链完整性。
- 【易错点 1】混淆原型修改与重写,误以为重写后旧实例也能继承新方法。
- 【易错点 2】重写原型时忘记设置 constructor 属性,导致 instanceof 或 constructor 判断异常。