理解Javascript_11_constructor实现原理_javascript技巧
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”的属性,它反过来引用函数本身。这是一种循环引用,如图:

constructor属性来自何方
我们来看一下Function构造String的构造过程:

注: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是如何处理的:

你会发现,这图的原理和上面一张图的原理是一样的。这就能正确解释Object.prototype.hasOwnProperty('isPrototypeOf')为true!
constructor探究
function Animal(){}
function Person(){}
var person = new Person();
alert(person.constructor); //Person
根据上一节的内容,你能正确的理解这段代码的结果吗?思考后,看一下其内存表示:

这张图明确有表明了Function构造Animal和Person的过程。同时也显示了实例person与Person的关系。
再深入一点,代码如下:
function Animal(){}
function Person(){}
Person.prototype = new Animal();
var person = new Person();
alert(person.constructor); //Animal
这个时候,person的构造函数成了Animal,怎么解释?

注:图中的虚线表示Person默认的prototype指向(只作参考的作用)。但是我们将Person.prototype指向了new Animal。
此时,Person的prototype指向的是Animal的实例,所以person的constructor为Animal这个构造函数。
结论:constructor的原理非常简单,就是在对象的原型链上寻找constructor属性。
注:如果你无法正确理解本文内容,请回顾前面章节的内容。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

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

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Ü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

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

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

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. 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

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

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.

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
