我们使用 assign
方法把多个对象的成员复制给某个对象:
const canEat = {
eat: function() {
this.hunger --;
console.log('eating, hunger: ' + this.hunger);
}
};
const canWalk = {
walk: function() {
console.log('walking');
}
};
const person = Object.assign({hunger: 10}, canEat, canWalk);
这里我们把 canEat
和 canWalk
的所有对象成员复制给了 person
,使得它拥有了上面两个对象的属性和方法。
person.walk()
// walking
person.eat()
// eating, hunger: 9
这个方法也可以用在构造函数上,我们把构造函数的 prototype
作为参数传递给 assign
函数。
const canEat = {
eat: function() {
this.hunger --;
console.log('eating, hunger: ' + this.hunger);
}
};
const canWalk = {
walk: function() {
console.log('walking');
}
};
function Person() {
this.hunger = 10;
};
Object.assign(Person.prototype, canEat, canWalk);
const person = new Person()
测试:
person.eat()
// eating, hunger: 9
我们把组合的方法用函数包装一下:
function mixins(target, ...sources) {
Object.assign(target.prototype, ...sources);
};
这里我们使用 Javascript 的 剩余参数语法(rest),来处理不定数量的参数。
网友评论