js实现扩展
实现 JavaScript 扩展的方法
使用原型链扩展
通过修改对象的原型(prototype),可以为现有对象类型添加新的方法或属性。这种方法适用于扩展内置对象或自定义对象。
Array.prototype.last = function() {
return this[this.length - 1];
};
const arr = [1, 2, 3];
console.log(arr.last()); // 输出 3
使用类继承扩展
通过继承现有类并添加新方法或重写现有方法,可以实现扩展。ES6 的 class 语法使继承更加清晰。

class ExtendedArray extends Array {
last() {
return this[this.length - 1];
}
}
const arr = new ExtendedArray(1, 2, 3);
console.log(arr.last()); // 输出 3
使用对象组合扩展
通过将现有对象与新功能组合,可以实现扩展而不直接修改原型或继承。这种方法更灵活且避免原型污染。

const arrayExtensions = {
last: function() {
return this[this.length - 1];
}
};
const arr = [1, 2, 3];
Object.assign(arr, arrayExtensions);
console.log(arr.last()); // 输出 3
使用函数包装扩展
通过高阶函数包装现有函数或对象,可以在不修改原函数的情况下扩展功能。
function withLogging(fn) {
return function(...args) {
console.log('调用函数:', fn.name);
return fn.apply(this, args);
};
}
const originalFunc = (a, b) => a + b;
const extendedFunc = withLogging(originalFunc);
console.log(extendedFunc(2, 3)); // 输出日志和结果 5
使用模块化扩展
通过模块化(如 ES6 模块)导入和导出功能,可以动态扩展代码库而不影响全局作用域。
// arrayUtils.js
export function last(array) {
return array[array.length - 1];
}
// main.js
import { last } from './arrayUtils.js';
const arr = [1, 2, 3];
console.log(last(arr)); // 输出 3
注意事项
- 避免直接扩展内置对象的原型(如
Array、Object),可能引发与其他库的冲突。 - 优先使用组合而非继承,以保持代码的灵活性和可维护性。
- 模块化扩展是现代 JavaScript 的推荐方式,减少全局污染。






