Wygląda na to, że w JavaScript jest kilka różnych "grup" funkcji podobnych do rzeczy. Oto moje imiona gotowe do nich:Terminologia dla różnych typów funkcji
„normalne funkcje”: są wymagalne z parens iz
new
. Większość funkcji należy do tej kategorii."Funkcje tylko konstruktorskie": Można je wywoływać wyłącznie za pomocą
new
. Na przykład:Image
,DOMParser
, itp."Funkcje inne niż konstruktorskie": Można je wywoływać przez pareny, ale nie przez
new
. Na przykład:Math.round
,Function.prototype
."Funkcje niemożliwe do wywołania": Te funkcje w ogóle nie można wywoływać. Na przykład,
window.constructor
,Document
,NodeList
itp
Jakie są imiona tych różnych grup funkcji?
Jestem również próbuje dowiedzieć się, czy który „grupa” jest funkcją może być określona na podstawie tego, czy jego [[Prototype]]
(__proto__
) właściwość jest ustawiona na Function.prototype
.
Większość „zwykłych funkcji” będzie miał
Function.prototype
, ale może to być usunięte przy użyciu niestandardowych__proto__
.Większość "funkcji tylko konstruktora" ma
Object.prototype
. Nie mogę znaleźć żadnych przypadków, w których mająFunction.prototype
(tak, niecall
lubapply
). Czy to zawsze jest przypadek/spec'd zachowanie?"Funkcje inne niż konstruktorskie" wydają się mieć głównie
Function.prototype
same z wyjątkiemFunction.prototype
. Czy są inne przypadki, które mająObject.prototype
?"Funkcje nieopłacalne" zdają się zawsze mieć
Object.prototype
. Czy tak jest?
będę reagować na niektóre odpowiedzi tutaj:
regularna funkcja:
function
Konstruktor:constructor
dla konstruktora:method
dla wymagalne:interface
To naprawdę nie jest to, czego szukam. "funkcja" i "konstruktor" są oczywiście poprawne, ale szukam czegoś bardziej konkretnego ("funkcja nie-konstruktora" itp.).
„metoda” nie jest lepsze niż „funkcji” w informacją, że nie można nazwać z new
i constructor
nie uzyskać punkt w całej, że może tylkobyć wywołana z new
.
W wielu przypadkach funkcje, których nie można wywołać, są dostępne tylko z poziomu obiektu constructor
hosta. Myślę, że większość z nich byłaby bardziej precyzyjnie nazywana "konstruktorami" niż "interfejsami".
[cd o przyjmujące przedmioty vs natywnych obiektów]
to rodzaj na właściwym torze. Biorąc pod uwagę this question (i akceptowaną odpowiedź oraz jej komentarze), wydaje się, że istnieje pewna niezgodność lub niejasność co do tego, czy funkcje zdefiniowane przez użytkownika są obiektami hosta lub rodzimymi.
Aby tego uniknąć, wystarczy wywołać funkcje UDF zdefiniowane przez użytkownika i nie martwić się, czy są one hostami czy natywnymi. Mamy więc UDF, obiekty hosta i obiekty natywne.
"normalne funkcje"
Każdy UDF
Native obiektów jak
Object
,String
, itpobiekty Host jak
window.toString
(przetestowane w Chrome 18).
"Konstruktor tylko funkcje"
Brak rodzimych obiekty?
Obiekty hosta, takie jak
DOMParser
,Image
.
"funkcje dla konstruktora"
Native obiektów jak
Math.round
iFunction.prototype
.Obiekty hosta, takie jak
DOMParser#parseFromString
.
"Non-wywoływalne funkcje"
Brak rodzimych obiekty?
Obiekty hosta, takie jak
NodeList
,DocumentFragment
.
Więc wygląda na to, że może istnieć związek między obiektami i funkcji gospodarza konstruktor-only/non-płatnych na żądanie, ale gospodarz vs rodem nie wydaje się mieć zastosowanie do nieprzestrzegania konstruktora i zwykłych funkcji.
Ty i twoi kwestie terminologiczne ponownie! :) – BoltClock
Heh, to niepokoi mnie przez wiele dni tym razem. zastanawiam się, czy ja po prostu tworzących sztuczne kategorie, gdzie ich nie ma, ale chcę to nazwać * coś *. –
[tutaj] (https://developer.mozilla.org/en/Introduction_to_Object-Oriented_JavaScript) jest dobrym wprowadzeniem do obiektowego JavaScr ipt, które powinno odpowiedzieć na twoje pytanie. – sp00m