如何从类构造函数中的参数继承方法

时间:2014-11-04 03:01:59

标签: javascript inheritance

所以我从一个文件中导出一个对象,然后我试图继承所有这些方法并添加

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

2 个答案:

答案 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上下文将是模型,而不是删除绑定函数