我希望有一个主类,其中包含从附加到其他许多函数的方法。所以说我有
class MasterObject {
method1...,
method2...,
etc...
}
使用ES6,id喜欢导入这些函数以作为方法分配给MasterClass。所以我尝试过这样的事情:
function setUpObj (...fns) {
class MasterObj {
constructor (...args) {
Object.assign(this, args)
}
}
return new MasterObj(fns)
}
let master = setUpObj(square, add, divide)
master.square(1,2)
当我这样做时,方法实际上没有分配给对象(我假设它们被分配给了这个,但不是作为方法)。显然我不明白原型继承是如何工作的,所以如果你能用ES6类来解释它会对我有很大帮助。
相关: https://gist.github.com/allenwb/53927e46b31564168a1d ES6 Class Multiple inheritance
答案 0 :(得分:2)
Object.assign
接受包含要复制的属性的对象。在您的情况下,您将传递一个数组,这意味着您将square
作为master[0](1, 2)
。如果你想要它们命名,你需要传递它们的名称,例如
function setUpObj (fns) {
class MasterObj {
constructor (args) {
Object.assign(this, args);
}
}
return new MasterObj(fns)
}
let master = setUpObj({square, add, divide})
master.square(1, 2);
说,这个设置似乎有点奇怪,因为你每次都要重新开课。也许这样的事情会更清楚:
function setUpObj (fns) {
class MasterObj {
}
Object.assign(MasterObj.prototype, fns);
return MasterObj;
}
let MasterObjWithFunctions = setUpObj({square, add, divide})
let master = new MasterObjWithFunctions();
master.square(1, 2)
答案 1 :(得分:0)
你需要this.socket.on('player.move', this.move.bind(this)); //Add binding here.
获取一个对象,因此它知道如何调用这些函数。
您还需要直接修改Object.assign
,以便功能绑定到prototype
而不是class
。
this