Mixins

2019-06-24  本文已影响0人  SingleDiego

我们使用 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);

这里我们把 canEatcanWalk 的所有对象成员复制给了 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),来处理不定数量的参数。

上一篇下一篇

猜你喜欢

热点阅读