减少代码中重复出现的功能
示例代码
var _ = require('unsderscore'); // 1
// 共享的功能代码
var logger = (function() {
var CustomerLogger = {
log: function(message) {
console.log(message);
},
};
return CustomerLogger;
}()); // 2
// 定制的
var Server = (function(aLogger) {
var CustomerServer = function() {
this.init = function() {
this.log('Initializing ...'); // 4
};
};
_.extend(CustomerServer.prototype, aLogger);
return CustomerServer;
}(logger)); // 3
// 调用
(new Server()).init(); // 5
extend
方法进行实现,可以将源对象 aLogger
中的所有属性复制到目标对象 CustomerLogger
中logger
其实是一个叫 CustomerLogger
的对象,它包含了 log
的方法CustomerServer
, 并且,通过了 extend
方法,将 aLogger
中的全部属性全部复制到了 CustomerServer
的原型对象上,使得可以在 CustomerServer
(也就是后来返回的 Server
上直接调用)extend
方法的绑定后,CustomerServer
的 init
方法,执行时,this
就拥有了 aLogger
中的 log
方法,因此可以直接调用 this.log()
new Server()
, 得到的实例之后,才能调用 init
方法,这个实例,也就是 CustomerServer
的一个实例mixin 与继承有点相似,但是
使用继承,只能影响到单个类层次,而使用 mixin, 则可以在多个对象之间共享功能