在ES6中为类分配多个函数

时间:2015-08-27 23:07:55

标签: javascript ecmascript-6

我希望有一个主类,其中包含从附加到其他许多函数的方法。所以说我有

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

2 个答案:

答案 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