Czy ten ostatni po prostu odnoszą się do niezawodnych obiektów funkcyjnych, które zostały utworzone przez niestandardowy konstruktor (np. Var Bird1 = nowy ptak ();)?

93
ppecher 30 wrzesień 2011, 22:07

7 odpowiedzi

Najlepsza odpowiedź

Oba warunki są zdefiniowane w specyfikacji ECMASCRESS:

Natywny obiekt.

Obiekt w implementacji ECMAScript, której semantyka są w pełni zdefiniowane przez tę specyfikację, a nie przez środowisko przyjmujące.

Uwaga Standardowe obiekty natywne są zdefiniowane w tej specyfikacji. Wbudowane są niektóre rodzime obiekty; Inni mogą być zbudowane w trakcie wykonania programu ECMAScript.

Źródło: http://es5.github.com/#x4.3.6

Obiekt hosta.

Obiekt dostarczony przez środowisko przyjmujące do uzupełnienia środowiska wykonania ECMASCRIPT.

Uwaga Każdy obiekt, który nie jest native, to obiekt hosta.

Źródło: http://es5.github.com/#x4.3.8


Kilka przykładów:

Obiekty rodzime: Object (konstruktor), {x1}}, Math, parseInt, eval, metody łańcuchowe, takie jak indexOf i replace , metody tablicy, ...

Obiekty hosta (zakładając otoczenie przeglądarki): window, document, location, history, history, XMLHttpRequest, setTimeout, setTimeout, querySelectorAll, ...

137
Community 20 czerwiec 2020, 09:12

Biorąc pod uwagę trzy obiekty: host, rodzimy, zwyczaj.

Obiekty hosta są tworzone przez środowisko i są specyficzne dla środowiska. Najbardziej znane środowisko byłoby przeglądarką internetową, ale może być kolejną platformą. Obiekty hosta utworzone w przeglądarce internetowej mogą być obiektem okna lub dokumentem. Zazwyczaj przeglądarka używa interfejsu API, aby utworzyć obiekty hosta w celu odzwierciedlenia modelu obiektu dokumentu w JavaScript. (WebBrowser ma różne silniki javascript, które to robią) obiekt hosta jest tworzony automatycznie w momencie, gdy strona sprawia w przeglądarce.

Natywny obiekt jest tworzony przez dewelopera za pomocą predefiniowanych klas JavaScript. Natywne obiekty znajdują się w pisemnym skrypcie.

Niż obiekt niestandardowy jest wykonany przez deweloper z niestandardowej (nie predefiniowanej lub częściowo predefiniowanej) klasy.

1
Khamaseen 16 styczeń 2018, 19:48

Natywne obiekty są obiektami, które przylegają do specyfikacji, tj. "Standard obiektów".

Obiekty hosta to obiekty, które przeglądarka (lub inne środowisko wykonawcze jak węzeł) zapewnia.

Większość obiektów hosta to rodzime obiekty, a za każdym razem, gdy instancje można utworzyć przy użyciu new, możesz mieć 99,99%, że jest to obiekt ojczysty, chyba żeś bałagan się z dziwnymi obiektami hosta.

To pojęcie zostało wprowadzone ze względu na obecność bardzo dziwacznych obiektów w IE (i innych starych przeglądarek?) . Na przykład:

typeof document.all == "undefined"; // true
document.all.myElementId; // object

Widząc to, wszyscy zgodziliby się, że document.all jest wyraźnie "niestandardowy", a tym samym obiekt hosta nisterski .

Dlaczego więc nie zadzwonić do rodzimych obiektów standardowe obiekty w pierwszej kolejności? Proste: W końcu Standard (!) Dokument o Obiekty nie-rodzime i dzwoni do nich niestandardowy doprowadziłby do paradoksu.

Jeszcze raz:

  • Native == "Standard"
  • HOST == Dostarczany przez przeglądarkę lub węzeł lub ...
  • Większość obiektów hosta jest rodzimych, a wszystkie obiekty nie-gospodarza są również rodzimy
0
user123444555621 8 wrzesień 2014, 05:43

Może to być przesadne, ale dla prostoty rodzimy obiekt jest taki, który istnieje i jest użyteczny w dowolnym środowisku, który wdraża kompletny silnik zgodny ECMASCR. Jest to zwykle (ale nie zawsze) przeglądarka.

Więc twój program Internet Explorer lub Twój Google Chrome, nie czyni na przykład obiektu ciągów. Powodem, dla którego możesz użyć obiektu ciągów, ponieważ jest to "rodzimy" (wbudowany) do samego języka JavaScript.

Jeśli jednak chcesz utworzyć okno wyskakujące, musisz użyć obiektu okna. Obiekt okna jest dostarczany przez samą oprogramowanie do przeglądarki, więc nie jest natywne dla JavaScript, ale jest częścią "Model obiektu przeglądarki" lub BOM.

0
Scott Marcus 18 październik 2014, 17:29

Jest bardziej jasny, jeśli rozróżniamy trzy rodzaje obiektów:

wbudowane obiekty : String, Math, RegExp, RegExp, Object, Function Function, Function itp JavaScript. Zdefiniowane w specyfikacji ECMAScript.

Obiekty hosta : obiekty, takie jak window, XmlHttpRequest, dom węzły i tak dalej, które są dostarczane przez środowisko przeglądarki. Odnosi się od wbudowanych obiektów, ponieważ nie wszystkie środowisko będą miały te same obiekty hosta. Jeśli Javascript działa poza przeglądarką, na przykład jako język skryptowy serwera, taki jak w Node.js, dostępne będą różne obiekty hosta.

obiekty użytkownika : obiekty zdefiniowane w kodzie javascript. Więc "Ptak" w twoim przykładzie byłby obiektem użytkownika.

Grupy specyfikacji JavaScript wbudowane obiekty i obiekty użytkownika razem jako rodzime obiekty . Jest to niekonwencjonalne zastosowanie terminu "Native", ponieważ obiekty użytkownika są oczywiście wdrażane w JavaScript, podczas gdy wbudowane są najprawdopodobniej wdrażane w innym języku pod maską, tak jak obiekty hosta byłyby. Ale z perspektywy specyfikacji JavaScript, zarówno wbudowane, jak i obiekty użytkownika pochodzą z JavaScript, ponieważ są zdefiniowane w specyfikacji JavaScript, podczas gdy obiekty hosta nie są.

29
JacquesB 30 październik 2014, 13:37

Oto moje zrozumienie specyfikacji.

To:

var bird = new Bird();

... Wyniki w rodzimym obiekcie, który po prostu stało się utworzone za pomocą operatora new.

Obiekty rodzime mają własność wewnętrzną [[Klasa]] jednej z następujących:

"Argumenty", "Array", "Boolean", "Data", "Błąd", "Funkcja", "JSON", "Matematyka", "Numer", "Obiekt", "REGEXP" i "String ".

Dla twojego bird1 będzie:

"Obiekt"

Tak jak jeśli tworzysz funkcję:

function my_func() {
    // ...
}

... my_func nie jest zdefiniowany w ECMASCRIPS, ale nadal jest obiektem ojczystym z wewnętrznym [[Klasa]]:

"Funkcja"

Obiekt hosta jest obiektem dostarczonym przez środowisko, aby służyć konkretnym celem do tego środowiska, który nie został zdefiniowany przez specyfikację.

Na przykład:

var divs = document.getElementsByTagName('div')

Obiekt, do którego odnosi się divs jest {EM> NODIList , który jest zintegrowany ze środowiskiem w taki sposób, że czuje się jak zwykły obiekt JavaScript, ale nie jest zdefiniowany nigdzie przez specyfikację.

Jego wewnętrzna nieruchomość [[Klasa]] jest:

"NodeList"

Zapewnia to projektantom wdrożeniom pewną elastyczność w wykonaniu wdrażania do konkretnej potrzeby środowiska.

Istnieją wymagania obiektów hostów , które są zdefiniowane w całym specyfikacji.

17
user113716 30 wrzesień 2011, 19:06

Nie można zobaczyć przekonującego odpowiedzi na pytanie, czy var bird1 = new Bird(); jest obiektem rodzimym lub gospodarzem. Zakładając, że ptak jest funkcją zdefiniowaną przez użytkownika, natywny obiekt nie wbudowany obiekt zostanie utworzony zgodnie z http://es5.github.io/#x13.2 według implementacji JavaScript. W przeciwieństwie do obiektów natywnych wbudowany będą obecni od początku programu JavaScript (takiego jak obiekt i wiele innych). Różnica między obiektem rodzimym a obiektem przyjmującym jest to, że pierwsza jest tworzona przez wdrożenie JavaScript, a drugi jest dostarczany przez środowisko gospodarza. W rezultacie obiektu hosta wewnętrzna [[Klasa]] Właściwość może różnić się od osób używanych przez wbudowane obiekty (np. Argumenty "," Array "," Boolean "," Data "," Błąd "," Funkcja "," JSON "," matematyka "," numer "," obiekt "," regexp "i" ciąg ").

Również warto zauważyć, że ECMA6 http: //www.ecma -International.org/publications/files/ecma-st/ecma-262.pdf nie używaj już obiektów natywujących i obiektów hostów terminologicznych. Zamiast tego definiuje poniżej typy obiektów, z wyraźniejmi wyjaśnieniami ich zamierzonego zachowania.

4.3.6 Zwykły obiekt

Obiekt ma domyślne zachowanie dla niezbędnych metod wewnętrznych, które muszą być obsługiwane przez wszystkie obiekty

4.3.7 Obiekt egzotyczny

Obiekt, który nie ma domyślnego zachowania dla jednej lub więcej zasadniczych metod wewnętrznych, które muszą być obsługiwane przez wszystkie obiekty Uwaga Każdy obiekt, który nie jest zwykłym obiektem, jest przedmiotem egzotycznym.

4.3.8 Standard obiekt.

obiekt, którego semantyka są określone przez tę specyfikację

4.3.9 Wbudowany obiekt

Obiekt określony i dostarczony przez wdrożenie ECMAScript

3
jaaw 19 marzec 2016, 16:05