为什么不通过Object.assign()工作将原型合并到另一个对象?

时间:2017-12-17 11:59:51

标签: javascript

所以我有class定义:



class Field {
    constructor(canvas) {
        const CANVAS = document.querySelector(canvas);
        const CONTEXT = CANVAS.getContext("2d");

        return Object.assign(CONTEXT, Field.prototype); // *
    }

    prototypeMethodName() {
        return "something";
    }
}

console.log(new Field("canvas"));

<canvas></canvas>
&#13;
&#13;
&#13;

这里的主要想法是,当我调用new Field()时,我得不到Field的实例,而是由另外两个对象组成的对象:CONTEXTField.prototypeCONTEXTCanvasRenderingContext2D的实例,基本上,我只想用其他方法对其进行扩充(在此示例中,它只是一种方法prototypeMethodName())。< / p>

但在这种情况下,我得到一个裸CONTEXT个对象,它不包含任何&#34; my&#34;属性。

我还注意到assign方法只有在我尝试将某个原型合并到tatget对象时才能正常工作。所以这里的事情不是关于CONTEXT对象,而是关于原型。

为什么我的代码不起作用?我该怎么办才能让它发挥作用呢?

2 个答案:

答案 0 :(得分:0)

  

我只想用其他方法来宣传它

Don't do that。改为使用构图。

  

但我得到一个不包含任何“我的”属性的简单CONTEXT对象。   我还注意到,只有在我尝试将某个原型合并到目标对象时,assign方法才能正常工作。

是。 class es的原型对象不包含任何enumerable方法,因此Object.assign找不到它们。看看ES6 Iterate over class methods

答案 1 :(得分:-1)

试试这个

merge(context, field) {
    for(let prop in Field.prototype) {
        context.prototype[prop] = Field.prototype[prop];
    }
    return context;
}