Programing

네이티브 개체와 호스트 개체의 차이점은 무엇입니까?

lottogame 2020. 9. 18. 19:12
반응형

네이티브 개체와 호스트 개체의 차이점은 무엇입니까?


후자는 단순히 사용자 지정 생성자 (예 : var bird1 = new Bird ();)에 의해 생성 된 기본이 아닌 함수 객체를 참조합니까?


두 용어 모두 ECMAScript 사양에 정의되어 있습니다.

네이티브 개체

호스트 환경이 아닌이 사양에 의해 의미가 완전히 정의되는 ECMAScript 구현의 객체.

참고 표준 네이티브 개체는이 사양에 정의되어 있습니다. 일부 기본 개체는 기본 제공됩니다. 다른 것들은 ECMAScript 프로그램의 실행 과정에서 구성 될 수 있습니다.

출처 : http://es5.github.com/#x4.3.6

호스트 개체

ECMAScript의 실행 환경을 완료하기 위해 호스트 환경에서 제공하는 객체입니다.

참고 네이티브가 아닌 모든 개체는 호스트 개체입니다.

출처 : http://es5.github.com/#x4.3.8


몇 가지 예 :

기본 객체 : Object(생성자), Date, Math, parseInt, eval, 문자열과 같은 방법 indexOfreplace, 배열 방법, ...

호스트 객체 (브라우저 환경을 가정) : window, document, location, history, XMLHttpRequest, setTimeout, getElementsByTagName, querySelectorAll, ...


세 종류의 객체를 구별하면 더 분명합니다.

내장 객체 : String, Math, RegExp, Object, Function등 - 자바 스크립트에서 항상 핵심 미리 정의 된 개체를 사용할 수 있습니다. ECMAScript 사양에 정의되어 있습니다.

호스트 오브젝트 : 같은 객체 window, XmlHttpRequest브라우저 환경에서 제공되는 등, DOM 노드와,. 모든 환경에 동일한 호스트 개체가있는 것은 아니므로 기본 제공 개체와 다릅니다. JavaScript가 브라우저 외부에서 실행되는 경우 (예 : Node.js와 같은 서버 측 스크립팅 언어) 다른 호스트 개체를 사용할 수 있습니다.

사용자 개체 : JavaScript 코드에 정의 된 개체입니다. 따라서 귀하의 예제에서 'Bird'는 사용자 개체입니다.

자바 스크립트 사양은 기본 개체 와 사용자 개체를 함께 기본 개체 로 그룹화 합니다 . 이것은 "네이티브"라는 용어의 비 정통적인 사용입니다. 사용자 객체는 분명히 JavaScript로 구현되는 반면 내장 기능은 호스트 객체처럼 내부적으로 다른 언어로 구현 될 가능성이 높기 때문입니다. 그러나 JavaScript 사양의 관점에서 볼 때 내장 및 사용자 개체는 모두 JavaScript 사양에 정의되어 있지만 호스트 개체는 그렇지 않기 때문에 JavaScript에 고유합니다.


사양에 대한 이해는 다음과 같습니다.

이:

var bird = new Bird();

... new연산자를 사용하여 생성 된 네이티브 개체가 생성됩니다 .

네이티브 개체에는 다음 중 하나의 내부 [[Class]] 속성이 있습니다.

"Arguments", "Array", "Boolean", "Date", "Error", "Function", "JSON", "Math", "Number", "Object", "RegExp"및 "String" .

귀하의 bird1경우 :

"목적"

함수를 생성하는 것처럼 :

function my_func() {
    // ...
}

... my_funcECMAScript에 정의되어 있지 않지만 여전히 내부 [[Class]]가있는 네이티브 개체입니다.

"함수"

호스트 개체는 사양에 정의되지 않은 해당 환경에 특정 목적을 제공하기 위해 환경에서 제공하는 개체입니다.

예를 들면 :

var divs = document.getElementsByTagName('div')

에서 참조하는 객체 divsNodeList 이며, 일반 JavaScript 객체처럼 느껴지는 방식으로 환경에 통합되지만 사양에 의해 어디에도 정의되어 있지 않습니다.

내부 [[Class]] 속성은 다음과 같습니다.

"NodeList"

이를 통해 구현 설계자에게 환경의 특정 요구에 맞게 구현할 수있는 유연성을 제공합니다.

사양 전체에 정의 된 호스트 개체의 요구 사항이 있습니다 .


Could not see a convincing answer to the question whether var bird1 = new Bird(); is a native or host object. Assuming Bird is a user defined function, a native non-built-in object will be created according to http://es5.github.io/#x13.2 by the javascript implementation. In contrast, native built-in objects will be present since the start of a javascript program (such as Object and many others). A difference between a native object and a host object is that former is created by the javascript implementation and the latter is provided by the host environment. As a result host object internal [[class]] property can be different from those used by built-in objects (i.e. "Arguments", "Array", "Boolean", "Date", "Error", "Function", "JSON", "Math", "Number", "Object", "RegExp", and "String").

Also, worthwhile noting that ECMA6 http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf does not use the terminology native and host objects any more. Instead, it defines below object types, with more clear explanations of their intended behaviour.

4.3.6 ordinary object

object that has the default behaviour for the essential internal methods that must be supported by all objects

4.3.7 exotic object

object that does not have the default behaviour for one or more of the essential internal methods that must be supported by all objects NOTE Any object that is not an ordinary object is an exotic object.

4.3.8 standard object

object whose semantics are defined by this specification

4.3.9 built-in object

object specified and supplied by an ECMAScript implementation


In addition to the other answers regarding Host Objects.

Host objects are specific to a environment. So next the the browser host objects, there are also specific objects to nodejs.

For the sake of the example, first starting with the Standard objects as defined in Javascript. Then the common objects for the Browser/DOM. Node has it's own Objects.

  1. Standard Javascript built-in object examples:

  2. Host Objects Document Object Model Examples:

  3. Host Objects in Node.js:


Considering three objects: Host, Native, Custom.

Host Objects are created by the environment and are environment specific. Best known environment would be a web-browser but could be another platform. The host objects created in web-browser could be the window object or the document. Typically a browser uses an API to create Host Objects to reflect the Document Object Model into JavaScript. (Webbrowser have different JavaScript Engines that do this) A host object is created automatically the moment the page renders in a browser.

A Native Object is created by the developer using predefined classes of JavaScript. Native Objects are in your written script.

Than, a Custom Object is made by the developer from a custom (not predefined, or partially predefined) class.


Native objects are objects that adhere to the specs, i.e. "standard objects".

Host objects are objects that the browser (or other runtime environment like Node) provides.

Most host objects are native objects, and whenever you instantiate something using new, you can be 99.99% sure that it is a native object, unless you mess around with weird host objects.

This notion has been introduced due to the presence of very bizarre objects in IE(and other old browsers?). For example:

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

When seeing this, everyone would agree that document.all is clearly "non-standard", and thus a non-native host object.

So why not call native objects standard objects in the first place? Simple: after all, the Standard(!) document talks about non-native objects too, and calling them non-standard would lead to a paradox.

Again:

  • native == "standard"
  • host == provided by the browser or Node or …
  • most host objects are native, and all non-host objects are native too

This may be overkill, but for simplicity a native object is one that exist and is usable in any environment that implements an ECMAScript compliant engine. This is usually (but not always) a browser.

So, your Internet Explorer or your Google Chrome, doesn't make the String object available to you, for example. The reason you can use the String object is because it is "native" (built-in) to the JavaScript language itself.

However, if you'd like to create a pop-up window, you'll need to use the window object. The window object is provided by the browser software itself, so it is not native to JavaScript, but it is part of the "Browser Object Model" or the BOM.

참고URL : https://stackoverflow.com/questions/7614317/what-is-the-difference-between-native-objects-and-host-objects

반응형