所以我从一个文件中导出一个对象,然后我试图继承所有这些方法并添加
function childClass (model) {
this.model = model
}
childClass.prototype.foo1 = function(){
this.model.Something1();
}
childClass.prototype.foo2 = function(){
this.model.Something2();
}
理想情况下,当有人从childClass实例化一个对象时,我希望它继承该类正在使用的基础模型对象中的所有方法,这样就不会调用obj.model.function1而只能调用obj.function1
答案 0 :(得分:1)
您可能正在寻找一种委托模式,您可以将其实现为:
defineDelegate(delegatee, method) {
childClass.prototype[method] = function() {
var delegatee = this[delegatee];
return delegatee[method].apply(delegatee, arguments);
};
}
现在你可以说
defineDelegate('model', 'Something1');
defineDelegate('model', 'Something2');
这需要清理和概括,但我希望你明白这一点。
如果由于某种原因您想在model
上委派所有方法:
Object.keys(modelClassPrototype)
.filter (function(k) { return typeof modelClassPrototype[k] === 'function'; })
.forEach(function(k) { defineDelegate('model', k); })
;
答案 1 :(得分:0)
你实际上是在询问如何在子类中混合模型
function childClass (model) {
Object.keys(model).forEach(function(key) {
childClass.prototype[key] = model[key].bind(model);
});
}
var m = { create: function() {console.log(this);}};
var c = new childClass(m);
c.create();
如果你不想将它绑定到模型,那么create方法的this
上下文将是模型,而不是删除绑定函数