所以我有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;
这里的主要想法是,当我调用new Field()
时,我得不到Field
的实例,而是由另外两个对象组成的对象:CONTEXT
和Field.prototype
。 CONTEXT
是CanvasRenderingContext2D
的实例,基本上,我只想用其他方法对其进行扩充(在此示例中,它只是一种方法prototypeMethodName()
)。< / p>
但在这种情况下,我得到一个裸CONTEXT
个对象,它不包含任何&#34; my&#34;属性。
我还注意到assign
方法只有在我尝试将某个原型合并到tatget对象时才能正常工作。所以这里的事情不是关于CONTEXT
对象,而是关于原型。
为什么我的代码不起作用?我该怎么办才能让它发挥作用呢?
答案 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;
}