Zobaczmy dwa przykłady, w których spróbuję wyjaśnić, co chcę zrozumieć.Utwórz klasę JS: IIFE a powróć prototyp
var Car = function(){
// Init class
function Car() { };
// Private func/vars
var private = { color:'red' };
// Public func/vars
Car.prototype = {
newColor: function(color) { private.color = color },
getColor: function() { return private.color }
};
return Car.prototype; // return with prototype
};
var myCar = new Car();
I:
var Car = (function(){
// Init class
function Car() { };
// Private func/vars
var private = { color:'red' };
// Public func/vars
Car.prototype = {
newColor: function(color) { private.color = color },
getColor: function() { return private.color }
};
return Car; // avoid prototype adding parentheses on next line;
})();
var myCar = new Car();
Zobaczmy !, Obie klasy są tworzone jako wyrażenia funkcyjnego i oba działają jednakowo. Jedyna różnica między nimi to: Pierwsza zwraca funkcję samochodu z jej prototypową właściwością. Drugi działa, zwracając funkcję Car, omijając właściwość prototype i zamiast tego używa IIFE.
Jakie są różnice między użyciem return Car.prototype;
i uniknięcia IIFE i użycia return Car;
przy użyciu IIFE (nawiasy na końcu deklaracji klasy).
Co dokładnie próbujesz osiągnąć? – alex
Próbuję zrozumieć teorię tego, jak działa dogłębnie i jakie są różnice techniczne. –
Czy zamierzasz użyć operatora 'new' przy zwróceniu obu obiektów' Car'? – alex