[Tyler McGinnis] Inheritance vs Composition
Notatki z lektury
Learning JavaScript Design Patterns A book by Addy Osmani
JavaScript Patterns by Stoyan Stefanov
developer.mozilla.org - Inheritance and the prototype chain
To jest mało przydatne ale pokazuje, że prototype to zwykly obiekt
function Obj() {}
Obj.prototype = (function() {
let sharedCounter = 0
return {
plus: function() {
sharedCounter++
},
minus: function() {
sharedCounter--
},
state: function() {
return sharedCounter
},
}
})()
const A = new Obj()
const B = new Obj()
A.plus()
A.plus()
B.minus()
console.log(A.state(), B.state()) // 1 1
function prototype
function Obj() {
this.privateCounter = 0
}
Obj.prototype = {
plus: function() {
this.privateCounter++
},
minus: function() {
this.privateCounter--
},
state: function() {
return this.privateCounter
},
}
const A = new Obj()
const B = new Obj()
A.plus()
B.minus()
console.log(A.state(), B.state()) // 1 -1
console.log(A.privateCounter) // 1
to jest proste i naturalne
Znane i lubiane tylko problem z kopiowaniem metod dla każdej instancji
Object.create(Object)Funkcja zwraca obiekt. Tak samo jak Object Literals z dodatkiem zmiennych prywatnych.
Pojedyńczy obiekt, globalny dostęp, wbudowane zarządzanie instancją
Object.getInstance()To nie jest dobre podejście. Lepiej jeśli inicjalizacją obiektów zajmuje się główny program aplikacji, a przekazywanie obiekty korzystają z jawnie przekazanych zależności, a z Singletonów