javascript 中原型对象可以通过直接赋值、使用 object.defineproperty 或 object.defineproperties 来修改。直接赋值会替换整个原型链,而 defineproperty 允许精确控制属性的特性(如 writable、enumerable、configurable),从而在不破坏原型链结构的前提下添加或修改属性。

如何安全地给现有对象的原型添加新方法?
最安全的做法是使用 Object.defineProperty 在原型上定义新属性。这种方式可以明确设置属性的描述符,避免意外覆盖已有属性或导致原型链污染。例如,给 Array.prototype 添加一个自定义方法时,应确保该方法是可枚举的且可配置的,以便后续维护。

function addMethodToPrototype(obj, methodName, func) {
Object.defineProperty(Object.getPrototypeOf(obj), methodName, {
value: func,
writable: true,
enumerable: false,
configurable: true
});
}
const arr = [1, 2, 3];
addMethodToPrototype(arr, 'customLog', function() { console.log(this); });
arr.customLog(); // 输出 [1, 2, 3]
如果直接替换原型对象会发生什么?
直接替换原型对象会导致原有实例失去对新原型的引用,除非重新绑定。这种做法通常不推荐,因为它可能破坏已有的继承关系。更好的方式是合并两个原型对象或使用 Object.setPrototypeOf 进行动态调整。
掌握 ES6+ 特性,包括 async/await、解构、扩展运算符、箭头函数、Promise、模块、迭代器、生成器以及函数式编程模式,编写简洁高效的 Java

const oldProto = { a: 1 };
const newProto = { b: 2 };
const obj = Object.create(oldProto);
console.log(obj.a); // 1
console.log(obj.b); // undefined
// 替换原型
Object.setPrototypeOf(obj, newProto);
console.log(obj.a); // undefined
console.log(obj.b); // 2
基于程序中某个输入、条件或结果的具体问题
当传入的对象为 null 或 undefined 时,调用 Object.getPrototypeOf 会抛出 TypeError。因此,在修改原型前应先检查输入的有效性,防止运行时错误。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










