2012-05-07 31 views
7

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, nie call lub apply). Czy to zawsze jest przypadek/spec'd zachowanie?

  • "Funkcje inne niż konstruktorskie" wydają się mieć głównie Function.prototype same z wyjątkiem Function.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, itp

    • obiekty 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 i Function.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.

+0

Ty i twoi kwestie terminologiczne ponownie! :) – BoltClock

+0

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ś *. –

+1

[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

Odpowiedz

0

Nie sądzę, nie ma oficjalnego nazewnictwa co pytasz, ale zwykle jest to jak ludzie nazywają te wszystkie funkcje w dowolnym języku programowania:

  • regularna funkcja: function
  • Konstruktor: constructor
  • dla konstruktora: method
  • dla wywoływalny: interface (w przypadku JS, odnosi się to do obiektów natywnych na poziomie niższym)
1

Myślę, że to, co tu robisz, to niuanse między obiektami natywnymi wbudowanymi w EcmaScript i obiektami hosta, stworzonymi i dostarczonymi przez programistę.

Mapa "Zwykłe funkcje" do obiektów hosta, to znaczy funkcje utworzone za pomocą JS i "Funkcje tylko konstruktorskie", funkcje inne niż konstruktorzy "i" Funkcje nieopłacalne "są odwzorowywane na rodzime obiekty wbudowane w język na niższym poziomie.

http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf

Powiązane problemy