네이티브 개체와 호스트 개체의 차이점은 무엇입니까?
후자는 단순히 사용자 지정 생성자 (예 : 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
, 문자열과 같은 방법 indexOf
과 replace
, 배열 방법, ...
호스트 객체 (브라우저 환경을 가정) : 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_func
ECMAScript에 정의되어 있지 않지만 여전히 내부 [[Class]]가있는 네이티브 개체입니다.
"함수"
호스트 개체는 사양에 정의되지 않은 해당 환경에 특정 목적을 제공하기 위해 환경에서 제공하는 개체입니다.
예를 들면 :
var divs = document.getElementsByTagName('div')
에서 참조하는 객체 divs
는 NodeList 이며, 일반 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.
Standard Javascript built-in object examples:
- Object
- Function
- Boolean
- Symbol
- Number
- Math
- ... (See full list on MDN web docs)
Host Objects Document Object Model Examples:
- Window
- Document
- History
- ... (See full list on DOM objects on MDN web docs)
- XMLHttpRequest (part of Web API)
- ... (See full list Web API on MDN web docs)
Host Objects in Node.js:
- http
- https
- fs
- url
- os
- ... (See full list on nodejs.org)
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.
'Programing' 카테고리의 다른 글
목록 내에서 항목을 이동 하시겠습니까? (0) | 2020.09.18 |
---|---|
stdClass 객체를 다른 클래스로 변환 / 캐스트 (0) | 2020.09.18 |
스레드에서 값 반환 (0) | 2020.09.18 |
반환 된 값이 null 인 경우 postgresql은 0을 반환합니다. (0) | 2020.09.18 |
Emacs를 다시 시작하지 않고 구성 다시로드 (0) | 2020.09.18 |