Heim Web-Frontend js-Tutorial 理解Javascript_11_constructor实现原理_javascript技巧

理解Javascript_11_constructor实现原理_javascript技巧

May 16, 2016 pm 06:18 PM
constructor 实现原理

constructor是什么

简单的理解,constructor指的就是对象的构造函数。请看如下示例:

复制代码 代码如下:

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

对于foo.constructor为Foo,我想应该很好理解,因为foo的构造函数为Foo。对于Foo、Object、Function的构造函数为Function,我想也没什么好争议的。(因为Foo,Object,Function都是函数对象,又因为所有的函数对象都是Function这个函数对象构造出来,所以它们的constructor为Function,详细请参考《js_函数对象》)

Prototype与Constructor的关系

复制代码 代码如下:

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

在 JavaScript 中,每个函数都有名为“prototype”的属性,用于引用原型对象。此原型对象又有名为“constructor”的属性,它反过来引用函数本身。这是一种循环引用,如图:
理解Javascript_11_constructor实现原理_javascript技巧
constructor属性来自何方
我们来看一下Function构造String的构造过程:
理解Javascript_11_constructor实现原理_javascript技巧
注:Function构造任何函数对象的过程都是一样的,所以说不管是String,Boolean,Number等内置对象,还是用户自定义对象,其构造过程都和上图一样。这里String只是一个代表而矣!
图中可以看出constructor是Function在创建函数对象时产生的,也正如'prototype与constructor的关系'中讲的那样,constructor是函数对象prototype链中的一个属性。即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

到现在,你会发现这和前面《原型链的实现原理》中的默认prototype指向Object.prototype有冲突,显然当时的理论不是很全面。

特别的Object
用心的读者可能会提出这样一问题,你这一套理论并不能适用于Object。因为以下的代码和你上面的理论是冲突的:
复制代码 代码如下:

alert(Object.prototype.hasOwnProperty('constructor'));//true
alert(Object.prototype.hasOwnProperty('isPrototypeOf'));//true,如果按上面的理论,这里应该返回false

真的是这样吗?不是!那我们来看一下特殊的Object是如何处理的:
理解Javascript_11_constructor实现原理_javascript技巧
你会发现,这图的原理和上面一张图的原理是一样的。这就能正确解释Object.prototype.hasOwnProperty('isPrototypeOf')为true!

constructor探究
复制代码 代码如下:

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

根据上一节的内容,你能正确的理解这段代码的结果吗?思考后,看一下其内存表示:
理解Javascript_11_constructor实现原理_javascript技巧
这张图明确有表明了Function构造Animal和Person的过程。同时也显示了实例person与Person的关系。

再深入一点,代码如下:
复制代码 代码如下:

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

这个时候,person的构造函数成了Animal,怎么解释?
理解Javascript_11_constructor实现原理_javascript技巧
注:图中的虚线表示Person默认的prototype指向(只作参考的作用)。但是我们将Person.prototype指向了new Animal。
此时,Person的prototype指向的是Animal的实例,所以person的constructor为Animal这个构造函数。

结论:constructor的原理非常简单,就是在对象的原型链上寻找constructor属性。

注:如果你无法正确理解本文内容,请回顾前面章节的内容。
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Vertiefendes Verständnis des zugrunde liegenden Implementierungsmechanismus der Kafka-Nachrichtenwarteschlange Vertiefendes Verständnis des zugrunde liegenden Implementierungsmechanismus der Kafka-Nachrichtenwarteschlange Feb 01, 2024 am 08:15 AM

Überblick über die zugrunde liegenden Implementierungsprinzipien der Kafka-Nachrichtenwarteschlange Kafka ist ein verteiltes, skalierbares Nachrichtenwarteschlangensystem, das große Datenmengen verarbeiten kann und einen hohen Durchsatz und eine geringe Latenz aufweist. Kafka wurde ursprünglich von LinkedIn entwickelt und ist heute ein Top-Level-Projekt der Apache Software Foundation. Architektur Kafka ist ein verteiltes System, das aus mehreren Servern besteht. Jeder Server wird als Knoten bezeichnet und jeder Knoten ist ein unabhängiger Prozess. Knoten werden über ein Netzwerk verbunden, um einen Cluster zu bilden. K

Detaillierte Erläuterung des Betriebsmechanismus und der Implementierungsprinzipien des PHP-Kerns Detaillierte Erläuterung des Betriebsmechanismus und der Implementierungsprinzipien des PHP-Kerns Nov 08, 2023 pm 01:15 PM

PHP ist eine beliebte serverseitige Open-Source-Skriptsprache, die häufig für die Webentwicklung verwendet wird. Es kann dynamische Daten verarbeiten und die HTML-Ausgabe steuern, aber wie erreicht man das? Anschließend stellt dieser Artikel den Kernbetriebsmechanismus und die Implementierungsprinzipien von PHP vor und verwendet spezifische Codebeispiele, um den Betriebsprozess weiter zu veranschaulichen. PHP-Quellcode-Interpretation PHP-Quellcode ist ein in der Sprache C geschriebenes Programm. Nach der Kompilierung wird die ausführbare Datei php.exe generiert. Für PHP, das in der Webentwicklung verwendet wird, wird es im Allgemeinen über A ausgeführt

Implementierungsprinzip des Partikelschwarmalgorithmus in PHP Implementierungsprinzip des Partikelschwarmalgorithmus in PHP Jul 10, 2023 pm 11:03 PM

Prinzip der Implementierung der Partikelschwarmoptimierung in PHP Die Partikelschwarmoptimierung (PSO) ist ein Optimierungsalgorithmus, der häufig zur Lösung komplexer nichtlinearer Probleme verwendet wird. Es simuliert das Futtersuchverhalten eines Vogelschwarms, um die optimale Lösung zu finden. In PHP können wir den PSO-Algorithmus verwenden, um Probleme schnell zu lösen. In diesem Artikel werden das Implementierungsprinzip und entsprechende Codebeispiele vorgestellt. Grundprinzip der Partikelschwarmoptimierung Das Grundprinzip des Partikelschwarmalgorithmus besteht darin, die optimale Lösung durch iterative Suche zu finden. Der Algorithmus enthält eine Gruppe von Partikeln

Eingehende Analyse der technischen Prinzipien und anwendbaren Szenarien der Kafka-Nachrichtenwarteschlange Eingehende Analyse der technischen Prinzipien und anwendbaren Szenarien der Kafka-Nachrichtenwarteschlange Feb 01, 2024 am 08:34 AM

Das Implementierungsprinzip der Kafka-Nachrichtenwarteschlange Kafka ist ein verteiltes Publish-Subscribe-Messagingsystem, das große Datenmengen verarbeiten kann und eine hohe Zuverlässigkeit und Skalierbarkeit aufweist. Das Implementierungsprinzip von Kafka lautet wie folgt: 1. Themen und Partitionen Daten in Kafka werden in Themen gespeichert, und jedes Thema kann in mehrere Partitionen unterteilt werden. Eine Partition ist die kleinste Speichereinheit in Kafka, bei der es sich um eine geordnete, unveränderliche Protokolldatei handelt. Produzenten schreiben Daten zu Themen und Konsumenten lesen daraus

Analysieren Sie das Implementierungsprinzip der asynchronen Aufgabenverarbeitungsfunktion von swoole Analysieren Sie das Implementierungsprinzip der asynchronen Aufgabenverarbeitungsfunktion von swoole Aug 05, 2023 pm 04:15 PM

Analysieren Sie das Implementierungsprinzip der asynchronen Aufgabenverarbeitungsfunktion von swoole. Mit der rasanten Entwicklung der Internettechnologie ist die Verarbeitung verschiedener Probleme immer komplexer geworden. In der Webentwicklung ist die Bewältigung einer großen Anzahl an Anfragen und Aufgaben eine häufige Herausforderung. Die herkömmliche synchrone Blockierungsmethode kann die Anforderungen einer hohen Parallelität nicht erfüllen, sodass die asynchrone Aufgabenverarbeitung eine Lösung darstellt. Als PHP-Coroutine-Netzwerk-Framework bietet Swoole leistungsstarke asynchrone Aufgabenverarbeitungsfunktionen. In diesem Artikel wird das Implementierungsprinzip anhand eines einfachen Beispiels analysiert. Bevor wir beginnen, müssen wir sicherstellen, dass dies der Fall ist

Beherrschen Sie den zugrunde liegenden Arbeitsmechanismus der Tomcat-Middleware Beherrschen Sie den zugrunde liegenden Arbeitsmechanismus der Tomcat-Middleware Dec 28, 2023 pm 05:25 PM

Um die zugrunde liegenden Implementierungsprinzipien der Tomcat-Middleware zu verstehen, benötigen Sie spezifische Codebeispiele. Tomcat ist ein weit verbreiteter Open-Source-Java-Webserver und Servlet-Container. Es ist hoch skalierbar und flexibel und wird häufig zum Bereitstellen und Ausführen von Java-Webanwendungen verwendet. Um die zugrunde liegenden Implementierungsprinzipien der Tomcat-Middleware besser zu verstehen, müssen wir ihre Kernkomponenten und Betriebsmechanismen untersuchen. In diesem Artikel werden die zugrunde liegenden Implementierungsprinzipien der Tomcat-Middleware anhand spezifischer Codebeispiele analysiert. Tom

Das Prinzip der Java-Crawler-Technologie: Detaillierte Analyse des Crawling-Prozesses für Webseitendaten Das Prinzip der Java-Crawler-Technologie: Detaillierte Analyse des Crawling-Prozesses für Webseitendaten Jan 09, 2024 pm 02:46 PM

Eingehende Analyse der Java-Crawler-Technologie: Implementierungsprinzipien des Crawlens von Webseitendaten Einführung: Mit der rasanten Entwicklung des Internets und dem explosionsartigen Wachstum von Informationen werden große Datenmengen auf verschiedenen Webseiten gespeichert. Diese Webseitendaten sind für uns sehr wichtig, um Informationsextraktion, Datenanalyse und Geschäftsentwicklung durchzuführen. Die Java-Crawler-Technologie ist eine häufig verwendete Methode zum Crawlen von Webseitendaten. In diesem Artikel werden die Implementierungsprinzipien der Java-Crawler-Technologie ausführlich analysiert und spezifische Codebeispiele bereitgestellt. 1. Was ist Crawler-Technologie? Crawler-Technologie (WebCrawling) wird auch Web-Crawler-Technologie genannt.

Implementierungsprinzip der Potenzierungsoperation in der C-Sprache Implementierungsprinzip der Potenzierungsoperation in der C-Sprache Feb 20, 2024 pm 09:57 PM

Das Implementierungsprinzip der Potenzierungsoperation in der C-Sprache besteht darin, die n-te Potenz einer Zahl zu berechnen, dh das Ergebnis der Berechnung von x^n. Obwohl die C-Sprache selbst keinen direkten Potenzierungsoperator bereitstellt, können Potenzierungsoperationen durch Methoden wie Schleifen oder Rekursion implementiert werden. 1. Schleifenmethode zur Implementierung einer Potenzierungsoperation Die Schleifenmethode ist eine relativ häufige Methode zur Implementierung einer Potenzierungsoperation. Ihre Grundidee besteht darin, das Ergebnis durch mehrere Schleifen und kumulative Multiplikationen zu berechnen. Der Beispielcode lautet wie folgt: #includedoublepow

See all articles