有一个这样的类定义:
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>
我想在调用时new Field()
返回一个对象CONTEXT
,类中描述的其他方法将混合到该对象中。也就是说,将CONTEXT
包含浏览器描述的所有属性以及我描述的属性。
但最后我得到了一个 "bare" CONTEXT
,不包含我的属性。
由于某种原因,我不能只让带有原型的版本工作,混入或完全不同的对象是行不通的this
,但原型存在某种问题。
告诉我为什么这种方法可能行不通,以及如何使它全部工作?
为了寻找答案,我在 StackOverflow 上提出了一个问题。
答案翻译:
简而言之,一切都如我最初预期的那样:原型的属性是不可枚举的(enumerable),并且不能与不可枚举的属性一起使用
Object.assign()
。