Во-первых, Javascript не имеет "классов". Ключевое слово class
используется только для того, чтобы вам было знакомо. Это должно было быть proto
вместо class
.
Лучше использовать mixins
. Также это очень сильно зависит от того, следует ли распространять изменения в methodB на всех потомков A, или если вы этого хотите.
Без распространения - копирование
Если вам не нужно распространение и вам нужно скопировать множество методов:
const A = {
name: 'I am A.'
}
const B = {
name: 'I am B.', // this will overwrite A when we #assign. so be careful to assign it back
methodB() {
console.log(`${this.name} - foo`)
}
}
const a = Object.create(A)
Object.assign(a, B)
a.name = A.name
// methodB is changed but it won't propagate.
B.methodB = function() {
console.log(`${this.name} - bar`)
}
a.methodB() // I am A. - foo
B.methodB() // I am B. - bar
С распространением.
И если вам нужен только 1 или несколько методов:
const A = {
name: 'I am A.'
}
const B = {
name: 'I am B.',
methodB() {
console.log(`${this.name} - foo`)
}
}
const a = Object.create(A)
a.methodA = function() {
B.methodB.call(this)
}
B.methodB = function() {
console.log(`${this.name} - bar`)
}
a.methodA() // I am A. - bar
B.methodB() // I am B. - bar