在继承部分,我们研究了扩展类功能的一种方法,另一种方法是使用委托来扩展功能。 使用委托,一个对象将包含对不同对象的引用,它将切换执行功能的请求。
下面的代码显示如何使用委派与Bird
类和Penguin
类。 Penguin
类有一个对Bird
类的引用,它将对自己的walk方法的调用委派给Bird
的walk方法。
// ES6
class Bird {
constructor(weight, height) {
this.weight = weight;
this.height = height;
}
walk() {
console.log('walk!');
}
}
class Penguin {
constructor(bird) {
this.bird = bird;
}
walk() {
this.bird.walk();
}
swim() {
console.log('swim!');
}
}
const bird = new Bird(...);
const penguin = new Penguin(bird);
penguin.walk(); //walk!
penguin.swim(); //swim!
关于“行为委派”的良好讨论可以在 这里找到。
下一节:ES6引入了块范围的概念。 块范围界定对来自其他语言(如C,Java或甚至PHP)的程序员来说是熟悉的。