Wygląda na to, że w końcu rozumiem dziedziczenie JavaScriptu i jak powinno to być zrobione poprawnie. Tu jest mój kodu:Dziedziczenie JavaScriptu i prototypów
function Human(eyes) {
this.eyes = eyes ? "Not blind" : "Blind";
}
Human.prototype.canSee = function() {
return this.eyes;
};
function Male(name, eyes) {
Human.call(this, eyes);
this.name = name;
}
Male.prototype = Object.create(Human.prototype);
var Sethen = new Male("Sethen", true);
console.log(Sethen.canSee()); //logs "Not blind"
Z tego co rozumiem, używając Object.create
stworzyć swój obiekt prototypowy dla dziedziczenia jest znacznie lepsza niż przy użyciu słowa kluczowego new
. Rodzi to parę pytań w mojej głowie.
- Czy w łańcuchu prototypów byłby
Male.prototype = Object.create(Human.prototype)
Male.prototype --> Human.prototype --> Object.prototype --> null
? - W konstruktorze
Male
, w którym używamHuman.call(this, eyes);
do wywoływania super klasy, muszę ponownie przekazać oczy w konstruktorzeMale
, aby przekazać go do konstruktoraHuman
. To wydaje się jak ból, czy jest łatwiejszy sposób na zrobienie tego? - Dlaczego czasami widzę kod taki jak
Male.prototype = new Human();
... To wydaje się być niepoprawne. Co się właściwie dzieje, kiedy to robimy?
Czy widziałeś ten http://stackoverflow.com/questions/13040684/javascript-inheritance-object-create-vs-new i ten http://stackoverflow.com/ pytania/4166616/understanding-the-difference-between-object-create-and-new-somefunction-in-j ??? – rafaelcastrocouto
Nie, nie mam. Ale popatrzę. – Sethen