js实现扩展
实现 JavaScript 扩展的方法
JavaScript 的扩展可以通过多种方式实现,包括原型扩展、类继承、混入模式等。以下是几种常见的扩展方法:
原型扩展
通过扩展对象的原型链,可以为现有对象添加新的方法或属性。这种方式适用于所有基于该原型的实例。

// 为 Array 原型添加一个自定义方法
Array.prototype.customFilter = function(callback) {
const result = [];
for (let i = 0; i < this.length; i++) {
if (callback(this[i], i, this)) {
result.push(this[i]);
}
}
return result;
};
// 使用自定义方法
const numbers = [1, 2, 3, 4, 5];
const evenNumbers = numbers.customFilter(num => num % 2 === 0);
console.log(evenNumbers); // [2, 4]
类继承
使用 ES6 的 class 语法可以通过继承来扩展已有的类。子类可以继承父类的属性和方法,并添加新的功能。
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a noise.`);
}
}
class Dog extends Animal {
speak() {
super.speak(); // 调用父类的方法
console.log(`${this.name} barks.`);
}
}
const dog = new Dog('Rex');
dog.speak();
// 输出:
// Rex makes a noise.
// Rex barks.
混入模式
混入模式(Mixin)是一种通过组合多个对象的功能来扩展对象的方式。这种方式适合在多个对象之间共享功能。

const canSwim = {
swim() {
console.log(`${this.name} is swimming.`);
}
};
const canFly = {
fly() {
console.log(`${this.name} is flying.`);
}
};
class Duck {
constructor(name) {
this.name = name;
}
}
// 将混入对象的功能添加到 Duck 类中
Object.assign(Duck.prototype, canSwim, canFly);
const duck = new Duck('Donald');
duck.swim(); // Donald is swimming.
duck.fly(); // Donald is flying.
使用装饰器
装饰器是一种动态扩展对象功能的方式,可以在运行时为对象添加额外的行为。
function withLogging(target) {
const originalMethod = target.describe;
target.describe = function() {
console.log('Calling describe...');
const result = originalMethod.call(this);
console.log('describe called.');
return result;
};
return target;
}
class Person {
constructor(name) {
this.name = name;
}
describe() {
return `My name is ${this.name}.`;
}
}
// 应用装饰器
const decoratedPerson = withLogging(new Person('Alice'));
console.log(decoratedPerson.describe());
// 输出:
// Calling describe...
// describe called.
// My name is Alice.
使用模块化扩展
通过模块化的方式,可以将功能拆分到不同的模块中,按需加载和扩展。
// math-extension.js
export function square(x) {
return x * x;
}
// main.js
import { square } from './math-extension.js';
console.log(square(5)); // 25
这些方法可以根据具体需求选择使用,灵活地扩展 JavaScript 的功能。





