我希望能够扩展.extend(obj)
函数中给出的任何对象。到目前为止,除了传入对象文字时,我已经让它工作了。
例子:
class myClass {
static extend(obj) {
Object.assign(Object.getPrototypeOf(obj), myClass.prototype);
myClass.call(obj);
}
sayHello() {
return 'hello!'
}
}
当从构造函数中调用扩展函数时,这很好用,如下所示:
function foo() {
myClass.extend(this);
}
const bar = new foo();
bar.sayHello();
但是,当我传入一个已经创建的对象文字时,来自 myClass.prototype 的方法不可用。
const foo = {};
myClass.extend(foo);
foo.sayHello(); // this is not available.
有没有办法检查最后一种情况并将原型分配给对象本身而不是它的原型,以便最后一种情况也可以工作?
static extend() {
if (/* obj is an object literal */) {
Object.assign(obj, myClass.prototype);
} else {
// first example
}