Изменить прототип прототипа, чтобы повлиять на экземпляр JS - PullRequest
1 голос
/ 28 февраля 2020

У меня есть экземпляр класса, но у меня нет доступа к этому экземпляру, только к самому классу. Могу ли я изменить прототип класса, чтобы экземпляр также получал обновление своих методов?

class B { c() { console.log('B') } }
class C { c() { console.log('C') } }
const b = new B // newbie :P
// now no access to b
// I want:
B.prototype.__proto__ = C.prototype
// now yes access to b
b.c() // prints C

1 Ответ

2 голосов
/ 28 февраля 2020

Вы были близки: вы можете заменить метод через B prototype:

class B { c() { console.log('B') ;} }
const b = new B();

B.prototype.c = () => { console.log("C"); }
b.c() // prints C

Вы не можете просто заменить весь прототип, вам действительно нужно изменить свойства прототипа:

class B { c() { console.log('B') ;} }
class C { c() { console.log('C') ;} }
const b = new B();

B.prototype = C.prototype;
b.c() // This still prints `B`
...