js实现扩展方法
在JavaScript中实现类似C#的扩展方法可以通过原型链(prototype)或高阶函数实现。以下是几种常见方式:
通过原型链扩展
为内置对象或自定义对象的原型添加方法,所有实例均可调用:
String.prototype.capitalize = function() {
return this.charAt(0).toUpperCase() + this.slice(1);
};
console.log("hello".capitalize()); // 输出 "Hello"
使用高阶函数包装
通过函数包装现有对象并附加新方法,避免污染原型:
function extend(obj) {
return {
original: obj,
log: function() {
console.log(this.original);
return this;
},
double: function() {
this.original *= 2;
return this;
}
};
}
const num = extend(5).double().log(); // 输出10
使用Proxy实现动态扩展
通过Proxy拦截属性访问动态添加方法:
const extendable = (obj) => new Proxy(obj, {
get(target, prop) {
if (prop === 'square') {
return () => target * target;
}
return target[prop];
}
});
const x = extendable(4);
console.log(x.square()); // 输出16
通过类继承扩展
通过继承原生类实现方法扩展:

class ExtendedArray extends Array {
last() {
return this[this.length - 1];
}
}
const arr = new ExtendedArray(1, 2, 3);
console.log(arr.last()); // 输出3
注意事项
- 原型扩展会影响所有实例,可能引发命名冲突
- Proxy方案有性能开销,适合特殊场景
- 类继承方式最符合ES6规范
- 高阶函数方式适合临时扩展需求
选择方案时应根据具体场景权衡可维护性与扩展需求。






