在 JavaScript 中,可以通过几种方式扩展内建类(如 Array、String、Number 等)。以下是主要的扩展方法:
最常用的方法是通过修改类的原型来添加新方法:
// 为 Array 添加一个 last 方法,返回数组最后一个元素
Array.prototype.last = function() {
return this[this.length - 1];
};
const arr = [1, 2, 3];
console.log(arr.last()); // 3
ES6 的 class 语法允许继承内建类:
class MyArray extends Array {
// 添加自定义方法
isEmpty() {
return this.length === 0;
}
// 可以覆盖现有方法
toString() {
return `[${super.toString()}]`;
}
}
const myArr = new MyArray(1, 2, 3);
console.log(myArr.isEmpty()); // false
console.log(myArr.toString()); // [1,2,3]
也可以为内建类添加静态方法:
String.format = function(template, ...args) {
return template.replace(/{(\d+)}/g, (match, number) => {
return typeof args[number] !== 'undefined' ? args[number] : match;
});
};
console.log(String.format('Hello {0}!', 'World')); // Hello World!
Object.defineProperty
可以定义不可枚举的属性// 更安全的扩展方式
Object.defineProperty(Array.prototype, 'sum', {
value: function() {
return this.reduce((a, b) => a + b, 0);
},
enumerable: false, // 不会出现在 for...in 循环中
writable: true,
configurable: true
});
const nums = [1, 2, 3];
console.log(nums.sum()); // 6
扩展内建类可以增加代码的表达力,但应该谨慎使用,避免过度扩展或与现有功能冲突。