Я хочу иметь возможность расширять любой объект, указанный в функции .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
}