简介
Mixin 本质就是一组方法。
Mixin 的目的是横向抽离出组件的相似代码。
相似概念:面向切面编程、插件。
// 将 mixins 上的方法,绑定到 obj.__proto__ 上,使得 obj 可以使用 mixins 的方法const createMixin = (obj, mixins) => {obj.__proto__ = Object.assign(obj.__proto__, mixins);return obj;}// 使用示例// mixinsconst sayMixin = {say: function () {console.log('hello, my name is ' + this.name);}}class User {constructor(name) {this.name = name;}}const user = new User('konsoue');createMixin(user, sayMixin);user.say()
我们使用继承时,是纵向的父子关系,需要去额外抽象类出来,处理这些逻辑。
而 mixin 可以让我们横向的,像在横的方向切一刀似的,假如一些方法、逻辑。
React 中的 mixin
var SetIntervalMixin = {componentWillMount: function () {this.intervals = []},setInterval: function (fn, timeout, ...args) {this.intervals.push(setInterval(fn, timeout, ...args))},componentWillUnmount: function () {this.intervals.forEach(clearInterval)}}var TickTock = React.creatClass({mixins: [SetIntervalMixin],getInitialState: function () {return { seconds: 0 }}})
