Witam. Przeglądając projekty na githubie odnośnie javascript'u zauważyłem że niektórzy używają funkcji(prototype) do tworzenia obiektów, natomiast inni posługują się zmiennymi(var) do tworzenia obiektów. Jaka jest różnica pomiędzy zmiennymi, funkcjami i jeszcze innymi częściami odnośnie tworzenia obiektów? Mógłby mi ktoś to objaśnić?
w zasadzie nie ma różnicy - w przypadku
function f()
{
}
tworzysz funkcję f
, w przypadku
var f = function()
{
}
bo domyślam się że o to chodzi - też tworzysz funkcję i przypisujesz ją do zmiennej o nazwie f
różnica jest niewielka, ale jest - w drugim przypadku możesz podmienić funkcję w dowolnym momencie na inną, w pierwszym nazwa f
jest stale przypisana funkcji
funkcja stworzona w normalny sposób jest dostępna w dowolnym miejscu, nawet przed jej zadeklarowaniem
w drugim przypadku funkcja jest przypisywana do zmiennej dopiero gdy interpreter dojdzie do tego miejsca - co wyklucza wywołanie tej funkcji wcześniej niż przed tą linią
jest też wolniejsze - jeżeli zadeklarujesz funkcje w sposób drugi to silnik js najpierw musi stworzyć te funkcje a potem po kolei je poprzypisywać do zmiennych - w pierwszym przypadku tylko je tworzy
znaczącą różnicę w wydajności widać już po kilku tysiącach stworzonych w ten sposób funkcji (lub stworzonych elementach którym metody są przypisywane w ten sposób)
Wspominając tylko mimochodem, to od ES6 będzie dostępna nowa składnia:
class Foo {
boo() {}
}
winerfresh napisał(a):
W teorii jest wolniejsze. V8 z racji popularności takowego rozwiązania raczej optymalizuje to do tego samego
w praktyce jest wolniejsze, sprawdzane właśnie na V8
nie da się tego raczej zoptymalizować bo funkcje zadeklarowane w ten sposób mogą się w każdej chwili zmienić
Dziękuję każdemu za objaśnienie. Teraz już rozumiem o co z tym chodzi ;)
@n0name_l tak o to właśnie mi chodziło.