class Sounds {
say() {
console.log('hello world')
}
}
new Sounds().prototype
const s = new Sounds();
s.__proto__ // класс Sounds
s.__proto__.__proto__ // Object
s.say()
– он ищется в самом экземпляре (нет), выше на 1 уровень (в классе Sounds) – нашёлся!s.toString()
– он ищется в самом экземпляре (нет), выше на 1 уровень (в классе Sounds) – (нет), ещё на 1 уровень выше в Object – есть! class Sounds {
say() {
console.log(`what the ${this.name} say`)
console.log(this)
}
}
class Animal {
constructor(name) {
this.name = name
}
}
Object.assign(Animal.prototype, new Sounds().__proto__)
const animal = new Animal('fox')
animal.say()
class Sounds {
say() {
console.log(`what the ${this.name} say`)
console.log(this)
}
}
class Animal extends Sounds {
constructor(name) {
super()
this.name = name
}
}
const animal = new Animal('fox')
animal.say()
Object.getOwnPropertyDescriptor(Sounds.prototype, 'say')
configurable: true
enumerable: false
value: ƒ say()
writable: true
Page
и в итоге получаемPage extends Blocks
Blocks extends Requests
множественное наследование
миксин для классов
1. Page
2. Blocks
3. Requests
4. Filter
5. Calendar
this
.import Filter from './common/filter';
import Calendar from './common/calendar';
class Page extends Blocks {
someMethod() {
let y = Filter.onlyNumbers(x);
Calendar.display();
}
}
ТС интересно через assign добавить методы не объекта, но классану с классом так не получится, извиняйте.
class A {
say() { console.log('Aaa!'); }
}
const obj = {};
obj.say = (new A()).say; // костылинг
obj.say(); // Aaa!
Calendar.onChange = (date) => Blocks.display(date);