js实现prototype扩展js
扩展 JavaScript 原型的方法
在 JavaScript 中,可以通过修改原型对象(prototype)来扩展内置对象或自定义对象的功能。以下是几种常见的实现方式:
扩展内置对象的原型
为内置对象(如 Array、String)添加新方法:

// 为 Array 添加一个 sum 方法
Array.prototype.sum = function() {
return this.reduce((acc, val) => acc + val, 0);
};
const numbers = [1, 2, 3];
console.log(numbers.sum()); // 输出 6
扩展自定义构造函数的原型
为自定义构造函数添加方法:

function Person(name, age) {
this.name = name;
this.age = age;
}
// 添加 greet 方法
Person.prototype.greet = function() {
return `Hello, my name is ${this.name}`;
};
const person = new Person('Alice', 25);
console.log(person.greet()); // 输出 "Hello, my name is Alice"
使用 Object.assign 批量扩展原型
通过 Object.assign 一次性添加多个方法:
Object.assign(Array.prototype, {
first() {
return this[0];
},
last() {
return this[this.length - 1];
}
});
const arr = [1, 2, 3];
console.log(arr.first()); // 输出 1
console.log(arr.last()); // 输出 3
避免覆盖现有方法
在扩展原型时,检查方法是否已存在:
if (!Array.prototype.sum) {
Array.prototype.sum = function() {
return this.reduce((acc, val) => acc + val, 0);
};
}
注意事项
- 扩展内置原型可能导致代码难以维护或与其他库冲突,需谨慎使用。
- 使用
Object.defineProperty可以定义不可枚举的方法:
Object.defineProperty(Array.prototype, 'sum', {
value: function() {
return this.reduce((acc, val) => acc + val, 0);
},
enumerable: false // 方法不可枚举
});
总结
通过修改 prototype 可以灵活扩展 JavaScript 对象的功能,但需注意兼容性和维护性问题。建议仅在必要时扩展原型,并优先考虑模块化或工具函数的方式替代原型扩展。






