W rzeczywistości istnieje kilka sposobów tworzenia obiektów w JavaScript. Gdy chcesz po prostu utworzyć obiekt, tworzenie obiektów „ opartych na konstruktorze ” nie jest korzystne przy użyciu operatora „ nowy ”. To samo, co tworzenie obiektu przy użyciu składni „ dosłowny obiekt ”. Ale obiekty „ oparte na konstruktorach ” utworzone za pomocą „ nowego ” operatora stają się niezwykle przydatne, gdy myślisz o „ dziedziczeniu prototypowym ”. Nie można utrzymać łańcucha dziedziczenia z obiektami utworzonymi w dosłownej składni. Ale możesz utworzyć funkcję konstruktora , dołączyć właściwości i metody do jej prototypu."zwróci obiekt, który będzie miał dostęp do wszystkich metod i właściwości dołączonych do prototypu tej funkcji konstruktora.
Oto przykład tworzenia obiektu za pomocą funkcji konstruktora (patrz objaśnienie kodu na dole):
function Person(firstname, lastname) {
this.firstname = firstname;
this.lastname = lastname;
}
Person.prototype.fullname = function() {
console.log(this.firstname + ' ' + this.lastname);
}
var zubaer = new Person('Zubaer', 'Ahammed');
var john = new Person('John', 'Doe');
zubaer.fullname();
john.fullname();
Teraz możesz utworzyć dowolną liczbę obiektów, tworząc instancję funkcji budowy Osoby, a wszystkie z nich odziedziczą po niej fullname ().
Uwaga: słowo kluczowe „ this ” będzie odnosić się do pustego obiektu w funkcji konstruktora i za każdym razem, gdy utworzysz nowy obiekt z Person za pomocą operatora „ new ”, automatycznie zwróci obiekt zawierający wszystkie właściwości i metody powiązane ze słowem kluczowym „ this ” . Obiekt ten z pewnością odziedziczy metody i właściwości związane z prototypem funkcji konstruktora Person (co jest główną zaletą tego podejścia).
Nawiasem mówiąc, jeśli chcesz uzyskać tę samą funkcjonalność ze składnią „ dosłowny obiekt ”, musisz utworzyć pełną nazwę () na wszystkich obiektach, takich jak poniżej:
var zubaer = {
firstname: 'Zubaer',
lastname: 'Ahammed',
fullname: function() {
console.log(this.firstname + ' ' + this.lastname);
}
};
var john= {
firstname: 'John',
lastname: 'Doe',
fullname: function() {
console.log(this.firstname + ' ' + this.lastname);
}
};
zubaer.fullname();
john.fullname();
Na koniec, jeśli teraz zapytacie, dlaczego powinienem używać podejścia funkcji konstruktora zamiast dosłowności obiektowej :
*** Dziedziczenie prototypowe umożliwia prosty łańcuch dziedziczenia, który może być niezwykle użyteczny i potężny.
*** Oszczędza pamięć, dziedzicząc typowe metody i właściwości zdefiniowane w prototypie funkcji konstruktora. W przeciwnym razie będziesz musiał kopiować je w kółko we wszystkich obiektach.
Mam nadzieję, że to ma sens.
a = new Object
,a = new Object()
,a = {}
, dosłowny jest znacznie prostsze, a niektóre testy wpadłem przed chwilą powiedzieć, że jest szybciej, nowsze kompilatory mogą powodować moje oświadczenie, że są fałszywe. To samo dotyczy tablic dosłownych