> 웹 프론트엔드 > 프런트엔드 Q&A > JavaScript 개체의 두 가지 범주는 무엇입니까?

JavaScript 개체의 두 가지 범주는 무엇입니까?

青灯夜游
풀어 주다: 2022-02-24 16:33:01
원래의
2851명이 탐색했습니다.

JavaScript에는 두 가지 유형의 객체가 있습니다. 1. 호스트 객체는 JavaScript 호스트 환경에서 제공되는 객체이며 해당 동작은 호스트 환경에 의해 완전히 결정됩니다. 2. 내장 객체는 JavaScript 언어 제공 객체에서 제공되는 객체입니다. .

JavaScript 개체의 두 가지 범주는 무엇입니까?

이 튜토리얼의 운영 환경: Windows 7 시스템, JavaScript 버전 1.8.5, Dell G3 컴퓨터.

JavaScript에서 객체는 호스트 객체와 내장 객체라는 두 가지 유형으로 나눌 수 있습니다.

  • 호스트 개체: JavaScript 호스트 환경에서 제공되는 개체입니다. 해당 동작은 호스트 환경에 의해 완전히 결정됩니다.

  • 내장 개체: JavaScript 언어에서 제공하는 개체

    • 내장 개체: JavaScript 런타임이 생성될 때 자동으로 생성되는 개체 인스턴스로 표준에 지정됩니다.

    • 네이티브 개체: Array 및 RegExp와 같은 내장 생성자 또는 특수 구문을 통해 사용자가 만들 수 있는 개체입니다.

    • 일반 객체: 프로토타입 상속이 가능한 {} 구문, 객체 생성자 또는 클래스 키워드 정의 클래스로 생성된 객체입니다.

Host Object

JavaScript 호스트 객체는 온갖 종류가 있지만 프런트엔드에 가장 친숙한 것은 의심할 바 없이 브라우저 환경의 호스트입니다. 브라우저 환경에서 우리 모두는 전역 개체가 창이라는 것을 알고 있으며 창에는 문서와 같은 많은 속성이 있습니다. 실제로 전역 개체 창의 속성 중 일부는 JavaScript 언어에서 오고 일부는 브라우저 환경에서 옵니다. 전역 개체 속성은 JavaScript 표준에 지정되어 있으며 Window 개체의 기타 속성은 다양한 W3C 표준에 지정되어 있습니다. 호스트 객체는 고유 유형과 사용자 생성 가능 유형으로 구분됩니다. 예를 들어 document.createElement는 일부 DOM 객체를 생성할 수 있습니다. 호스트는 또한 몇 가지 생성자를 제공합니다. 예를 들어 img 요소를 생성하기 위해 새 이미지를 사용할 수 있습니다. 표준. 내장 객체는 JavaScript 코드가 실행되기 전에 생성되며 종종 기본 라이브러리처럼 작동합니다. 앞서 언급한 "클래스"는 실제로 고유 객체의 한 유형입니다. ECMA 표준은 150개 이상의 내장 객체를 포함하는 내장 객체 테이블을 제공합니다.

내장 객체·네이티브 객체

자바스크립트에서는 네이티브 객체라고 불리는 언어 자체의 생성자를 통해 생성할 수 있는 객체를 호출합니다. JavaScript 표준에서는 30개 이상의 생성자가 제공됩니다. 내 이해와 다양한 응용 프로그램 시나리오에 따라 기본 개체를 다음 범주로 나눕니다.

이러한 생성자를 통해 new 작업을 사용하여 새 개체를 만들 수 있으므로 이러한 개체를 기본 개체라고 부릅니다. 이러한 생성자 기능은 거의 모두 순수 JavaScript 코드로 구현될 수 없으며 클래스/확장 구문을 사용하여 상속될 수 없습니다. 이러한 생성자로 생성된 대부분의 개체는 다음과 같은 전용 필드를 사용합니다.

Error: [[ErrorData]]
Boolean: [[BooleanData]]
Number: [[NumberData]]
Date: [[DateValue]]
RegExp: [[RegExpMatcher]]
Symbol: [[SymbolData]]
Map: [[MapData]]
로그인 후 복사

이러한 필드는 프로토타입 상속 방법이 제대로 작동할 수 없게 하므로 이러한 모든 기본 개체가 특정 기능이나 성능을 위해 설계되었다고 생각할 수 있습니다." ". JavaScript 개체의 두 가지 범주는 무엇입니까?
객체를 사용하여 함수 및 생성자 시뮬레이션: 함수 객체 및 생성자 객체

앞서 객체의 일반적인 분류를 소개했습니다. JavaScript에는 객체를 보는 다른 관점이 있습니다. 즉 객체를 사용하여 함수 및 생성자를 시뮬레이션하는 것입니다. 건설자. 실제로 JavaScript는 이러한 유형의 개체에 대해 전용 필드 메커니즘을 예약하고 추상 함수 개체 및 생성자 개체의 개념을 규정합니다.

함수 객체의 정의는 [[call]] 비공개 필드가 있는 객체이고 생성자 객체의 정의는 비공개 필드 [[construct]]가 있는 객체입니다.

JavaScript는 객체 시뮬레이션 함수 설계를 사용하여 일반 프로그래밍 언어의 함수를 대체하며 다른 언어의 함수처럼 매개변수를 호출하고 전달할 수 있습니다. "[[call]] 비공개 필드가 있는 개체"를 제공하는 모든 호스트는 JavaScript 함수 호출 구문으로 지원될 수 있습니다.

모든 객체는 [[호출]]만 구현하면 된다고 말할 수 있습니다. 이는 함수 객체이며 함수로 호출될 수 있습니다. 그리고 [[construct]]를 구현하면 생성자 객체이므로 생성자로 호출할 수 있다.

JavaScript 실행 환경을 제공하는 프로그래머의 경우 위에서 언급한 호스트 개체 및 내장 개체(예: 기호 함수)는 필드가 준수하는 한 함수 및 생성자를 시뮬레이션할 수 있습니다.

물론 사용자가 function 키워드를 사용하여 생성한 함수는 함수이면서 생성자여야 합니다. 그러나 그들이 나타내는 행동 효과는 동일하지 않습니다.

호스트 및 내장 객체의 경우 [[call]](함수로 호출) 및 [[construct]](생성자로 호출) 구현이 항상 일관되지는 않습니다.

对于用户使用 function 语法或者 Function 构造器创建的对象来说,[[call]]和[[construct]]行为总是相似的,它们执行同一段代码。我们看一下示例。

function f(){
    return 1;
}
var v = f(); //把f作为函数调用
var o = new f(); //把f作为构造器调用
로그인 후 복사

这样的规则造成了个有趣的现象,如果我们的构造器返回了一个新的对象,那么 new 创建的新对象就变成了一个构造函数之外完全无法访问的对象,这一定程度上可以实现“私有”。

function cls(){
    this.a = 100;
    return {
        getValue:() => this.a
    }
}
var o = new cls;
o.getValue(); //100
//a在外面永远无法访问到
로그인 후 복사

特殊行为的对象

除了上面介绍的对象之外,在固有对象和原生对象中,有一些对象的行为跟正常对象有很大区别。

它们常见的下标运算(就是使用中括号或者点来做属性访问)或者设置原型跟普通对象不同,这里我简单总结一下。

  • Array:Array 的 length 属性根据最大的下标自动发生变化。

  • Object.prototype:作为所有正常对象的默认原型,不能再给它设置原型了。

  • String:为了支持下标运算,String 的正整数属性访问会去字符串里查找。

  • Arguments:arguments 的非负整数型下标属性跟对应的变量联动。

  • 模块的 namespace 对象:特殊的地方非常多,跟一般对象完全不一样,尽量只用于 import 吧。

  • 类型数组和数组缓冲区:跟内存块相关联,下标运算比较特殊。

  • bind 后的 function:跟原来的函数相关联。

【相关推荐:javascript视频教程

위 내용은 JavaScript 개체의 두 가지 범주는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿