찾다
웹 프론트엔드JS 튜토리얼자바스크립트 이해_11_생성자 구현 원리_자바스크립트 기술

생성자란

간단히 이해하면 생성자는 객체의 생성자를 말합니다. 다음 예를 참조하세요.

코드 복사 코드는 다음과 같습니다.

function Foo( ){};
var foo = new Foo();
alert(foo.constructor);//Foo
alert(Foo.constructor);//함수
alert(Object.constructor) ;//Function
alert(Function.constructor);//Function

foo.constructor가 Foo라면 foo의 생성자가 Foo이기 때문에 이해하기 쉬울 것이라고 생각합니다. Foo, Object, Function의 생성자가 Function이라는 사실에는 논란의 여지가 없다고 생각합니다. (Foo, Object, Function은 모두 함수 객체이고, 모든 함수 객체는 Function 객체에서 생성되기 때문에 생성자는 Function입니다. 자세한 내용은 "js_Function Object"를 참고하세요)

프로토타입 및 생성자

코드 복사 코드는 다음과 같습니다.

function Dog( ) {}
alert(Dog === Dog.prototype.constructor);//true

JavaScript에서 각 함수에는 "prototype"이라는 속성이 있습니다. 프로토타입 객체. 이 프로토타입 객체에는 함수 자체를 참조하는 "생성자"라는 속성이 있습니다. 이는 그림과 같은 순환 참조입니다.
자바스크립트 이해_11_생성자 구현 원리_자바스크립트 기술
생성자 속성은 어디에서 왔나요?
문자열을 구성하는 함수의 구성 과정을 살펴보겠습니다.
자바스크립트 이해_11_생성자 구현 원리_자바스크립트 기술
참고: 함수 생성자 모든 함수 객체의 프로세스는 동일하므로 String, Boolean, Number 등과 같은 내장 객체이든 사용자 정의 객체이든 생성 프로세스는 다음과 같습니다. 위 그림과 동일합니다. 여기서 문자열은 단지 대표일 뿐입니다!
그림에서 볼 수 있듯이 생성자는 함수 객체를 생성할 때 '프로토타입과 생성자의 관계'에서 언급했듯이 생성자는 함수 객체 프로토타입 체인의 속성입니다. 그것은 String=== String.prototype.constructor입니다.

또한 이론이 옳다는 것을 증명하기 위해 코드 조각을 사용하고 싶습니다.
코드 복사 코드는 다음과 같습니다.

function Person(){}
var p = new Person()
alert(p.constructor);//Person
alert( Person.prototype.constructor) ;//Person
alert(Person.prototype.hasOwnProperty('constructor'));//true
alert(Person.prototype.isPrototypeOf(p));//true
alert(Object.prototype .isPrototypeOf(p));//true
alert(Person.prototype == Object.prototype);//false

지금쯤이면 알 수 있을 것입니다. 이는 이전의 "프로토타입 체인"과 동일합니다. "구현 원리"의 기본 프로토타입은 Object.prototype을 가리키며 이는 충돌합니다. 분명히 당시의 이론은 그다지 포괄적이지 않았습니다.

특수 개체
주의 깊은 독자라면 이 질문을 할 수도 있습니다. 귀하의 이론은 개체에 적용되지 않습니다. 다음 코드는 위의 이론과 충돌하기 때문입니다.
코드 복사 코드는 다음과 같습니다.

alert(Object.prototype.hasOwnProperty('constructor'));//true
alert(Object.prototype.hasOwnProperty('isPrototypeOf'));//true, 위 이론에 따르면 여기서는 false가 반환되어야 합니다.

정말 그런가요? 아니요! 그럼 특수 객체가 어떻게 처리되는지 살펴보겠습니다.
자바스크립트 이해_11_생성자 구현 원리_자바스크립트 기술
이 그림의 원리는 위 그림의 원리와 동일하다는 것을 알 수 있습니다. 이는 Object.prototype.hasOwnProperty('isPrototypeOf')가 true임을 정확하게 설명할 수 있습니다.

생성자 탐색
코드 복사 코드는 다음과 같습니다.

function Animal(){}
function Person(){}
var person = new Person()
alert(person. constructor); //Person

이전 섹션의 내용을 토대로 이 코드의 결과를 올바르게 이해할 수 있습니까? 생각해 본 후 메모리 표현을 살펴보세요.
자바스크립트 이해_11_생성자 구현 원리_자바스크립트 기술
이 그림은 함수가 동물과 사람을 구성하는 과정을 명확하게 보여줍니다. 동시에 인스턴스 사람과 사람 간의 관계도 표시됩니다.

조금 더 깊이 들어가 보면 코드는 다음과 같습니다.
코드 복사 코드는 다음과 같습니다.

function Animal(){}
function Person(){}
Person.prototype = new Animal()
var person = new Person()
alert(person) .constructor); //Animal

이때 person의 생성자는 어떻게 설명할까요?
자바스크립트 이해_11_생성자 구현 원리_자바스크립트 기술
참고: 그림의 점선은 Person의 기본 프로토타입 포인터를 나타냅니다(참고용). 하지만 우리는 Person.prototype을 새로운 Animal로 지정했습니다.
이때 Person의 프로토타입은 Animal의 인스턴스를 가리키므로 person의 생성자는 Animal의 생성자가 됩니다.

결론: 생성자의 원리는 매우 간단합니다. 즉, 객체의 프로토타입 체인에서 생성자 속성을 찾는 것입니다.

참고: 이 기사의 내용을 정확하게 이해할 수 없다면 이전 장의 내용을 검토하시기 바랍니다.
성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
深入了解Kafka消息队列的底层实现机制深入了解Kafka消息队列的底层实现机制Feb 01, 2024 am 08:15 AM

Kafka消息队列的底层实现原理概述Kafka是一个分布式、可扩展的消息队列系统,它可以处理大量的数据,并且具有很高的吞吐量和低延迟。Kafka最初是由LinkedIn开发的,现在是Apache软件基金会的一个顶级项目。架构Kafka是一个分布式系统,由多个服务器组成。每个服务器称为一个节点,每个节点都是一个独立的进程。节点之间通过网络连接,形成一个集群。K

PHP核心的运行机制与实现原理详解PHP核心的运行机制与实现原理详解Nov 08, 2023 pm 01:15 PM

PHP是一种流行的开源服务器端脚本语言,大量被用于Web开发。它能够处理动态数据以及控制HTML的输出,但是,如何实现这一切?那么,本文将会介绍PHP的核心运行机制和实现原理,并利用具体的代码示例,进一步说明其运行过程。PHP源码解读PHP源码是一个由C语言编写的程序,经过编译后生成可执行文件php.exe,而对于Web开发中使用的PHP,在执行时一般通过A

PHP中的粒子群算法实现原理PHP中的粒子群算法实现原理Jul 10, 2023 pm 11:03 PM

PHP中的粒子群算法实现原理粒子群算法(ParticleSwarmOptimization,PSO)是一种优化算法,常用于求解复杂的非线性问题。它通过模拟鸟群觅食行为,以寻找最优解。在PHP中,我们可以利用PSO算法快速求解问题,本文将介绍其实现原理,并给出相应的代码示例。粒子群算法基本原理粒子群算法的基本原理是通过迭代搜索找到最优解。算法中存在一群粒

深入分析Kafka消息队列的技术原理与适用场景深入分析Kafka消息队列的技术原理与适用场景Feb 01, 2024 am 08:34 AM

Kafka消息队列的实现原理Kafka是一个分布式发布-订阅消息系统,它可以处理大量的数据,并且具有很高的可靠性和可扩展性。Kafka的实现原理如下:1.主题和分区Kafka中的数据存储在主题(topic)中,每个主题可以分为多个分区(partition)。分区是Kafka中最小的存储单位,它是一个有序的、不可变的日志文件。生产者将数据写入主题,而消费者从

刨析swoole异步任务处理功能的实现原理刨析swoole异步任务处理功能的实现原理Aug 05, 2023 pm 04:15 PM

刨析swoole异步任务处理功能的实现原理随着互联网技术的迅猛发展,各种问题的处理变得越来越复杂。在Web开发中,处理大量的请求和任务是一个常见的挑战。传统的同步阻塞方式无法满足高并发的需求,于是异步任务处理成为一种解决方案。Swoole作为PHP协程网络框架,提供了强大的异步任务处理功能,本文将以一个简单的示例来解析其实现原理。在开始之前,我们需要先确保已

掌握Tomcat中间件底层工作机制掌握Tomcat中间件底层工作机制Dec 28, 2023 pm 05:25 PM

理解Tomcat中间件的底层实现原理,需要具体代码示例Tomcat是一个开源的、使用广泛的JavaWeb服务器和Servlet容器。它具有高度的可扩展性和灵活性,常用于部署和运行JavaWeb应用程序。为了更好地理解Tomcat中间件的底层实现原理,我们需要探究它的核心组件和运行机制。本文将通过具体的代码示例,解析Tomcat中间件的底层实现原理。Tom

Java爬虫技术的原理:详细剖析网页数据抓取过程Java爬虫技术的原理:详细剖析网页数据抓取过程Jan 09, 2024 pm 02:46 PM

深入解析Java爬虫技术:网页数据抓取的实现原理引言:随着互联网的快速发展和信息爆炸式增长,大量的数据被存储在各种网页上。这些网页数据对于我们进行信息提取、数据分析和业务发展非常重要。而Java爬虫技术则是一种常用的网页数据抓取方式。本文将深入解析Java爬虫技术的实现原理,并提供具体的代码示例。一、什么是爬虫技术爬虫技术(WebCrawling)又称为网

C语言中乘方运算的实现原理C语言中乘方运算的实现原理Feb 20, 2024 pm 09:57 PM

C语言中乘方运算的实现原理在C语言中,乘方运算是计算一个数的n次方,即计算x^n的结果。虽然C语言本身没有提供直接的乘方运算符,但可以通过循环或递归等方法来实现乘方运算。一、循环法实现乘方运算循环法是一种比较常用的实现乘方运算的方法,其基本思想是通过多次循环累乘来计算结果。示例代码如下:#includedoublepow

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음