Maison interface Web js tutoriel 理解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属性。

注:如果你无法正确理解本文内容,请回顾前面章节的内容。
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Compréhension approfondie du mécanisme de mise en œuvre sous-jacent de la file d'attente de messages Kafka Compréhension approfondie du mécanisme de mise en œuvre sous-jacent de la file d'attente de messages Kafka Feb 01, 2024 am 08:15 AM

Présentation des principes d'implémentation sous-jacents de la file d'attente de messages Kafka Kafka est un système de file d'attente de messages distribué et évolutif qui peut gérer de grandes quantités de données et présente un débit élevé et une faible latence. Kafka a été initialement développé par LinkedIn et constitue désormais un projet de haut niveau de l'Apache Software Foundation. Architecture Kafka est un système distribué composé de plusieurs serveurs. Chaque serveur est appelé un nœud et chaque nœud est un processus indépendant. Les nœuds sont connectés via un réseau pour former un cluster. K

Explication détaillée du mécanisme de fonctionnement et des principes de mise en œuvre du noyau PHP Explication détaillée du mécanisme de fonctionnement et des principes de mise en œuvre du noyau PHP Nov 08, 2023 pm 01:15 PM

PHP est un langage de script open source côté serveur très utilisé pour le développement Web. Il peut gérer des données dynamiques et contrôler la sortie HTML, mais comment y parvenir ? Ensuite, cet article présentera le mécanisme de fonctionnement de base et les principes de mise en œuvre de PHP, et utilisera des exemples de code spécifiques pour illustrer davantage son processus de fonctionnement. Interprétation du code source PHP Le code source PHP est un programme écrit en langage C. Après compilation, il génère le fichier exécutable php.exe. Pour le PHP utilisé en développement Web, il est généralement exécuté via A.

Principe de mise en œuvre de l'algorithme d'essaim de particules en PHP Principe de mise en œuvre de l'algorithme d'essaim de particules en PHP Jul 10, 2023 pm 11:03 PM

Principe de mise en œuvre de l'optimisation par essaim de particules dans PHP L'optimisation par essaim de particules (PSO) est un algorithme d'optimisation souvent utilisé pour résoudre des problèmes non linéaires complexes. Il simule le comportement de recherche de nourriture d'une volée d'oiseaux pour trouver la solution optimale. En PHP, nous pouvons utiliser l'algorithme PSO pour résoudre rapidement des problèmes. Cet article présentera son principe de mise en œuvre et donnera des exemples de code correspondants. Principe de base de l'optimisation par essaim de particules Le principe de base de l'algorithme par essaim de particules est de trouver la solution optimale par recherche itérative. Il y a un groupe de particules dans l'algorithme

Analyse approfondie des principes techniques et des scénarios applicables de la file d'attente de messages Kafka Analyse approfondie des principes techniques et des scénarios applicables de la file d'attente de messages Kafka Feb 01, 2024 am 08:34 AM

Le principe de mise en œuvre de la file d'attente de messages Kafka Kafka est un système de messagerie de publication-abonnement distribué qui peut gérer de grandes quantités de données et présente une fiabilité et une évolutivité élevées. Le principe de mise en œuvre de Kafka est le suivant : 1. Sujets et partitions Les données dans Kafka sont stockées dans des sujets, et chaque sujet peut être divisé en plusieurs partitions. Une partition est la plus petite unité de stockage dans Kafka, qui est un fichier journal ordonné et immuable. Les producteurs écrivent des données dans des sujets et les consommateurs les lisent.

Analyser le principe de mise en œuvre de la fonction de traitement des tâches asynchrones de swoole Analyser le principe de mise en œuvre de la fonction de traitement des tâches asynchrones de swoole Aug 05, 2023 pm 04:15 PM

Analyser le principe de mise en œuvre de la fonction de traitement asynchrone des tâches de swoole.Avec le développement rapide de la technologie Internet, le traitement de divers problèmes est devenu de plus en plus complexe. Dans le développement Web, gérer un grand nombre de requêtes et de tâches est un défi courant. La méthode de blocage synchrone traditionnelle ne peut pas répondre aux besoins d'une concurrence élevée, le traitement des tâches asynchrones devient donc une solution. En tant que framework réseau de coroutines PHP, Swoole fournit de puissantes fonctions de traitement de tâches asynchrones. Cet article utilisera un exemple simple pour analyser son principe de mise en œuvre. Avant de commencer, nous devons nous assurer que nous avons

Maîtriser le mécanisme de fonctionnement sous-jacent du middleware Tomcat Maîtriser le mécanisme de fonctionnement sous-jacent du middleware Tomcat Dec 28, 2023 pm 05:25 PM

Pour comprendre les principes de mise en œuvre sous-jacents du middleware Tomcat, vous avez besoin d'exemples de code spécifiques. Tomcat est un serveur Web Java et un conteneur de servlets open source largement utilisés. Il est hautement évolutif et flexible et est couramment utilisé pour déployer et exécuter des applications Web Java. Afin de mieux comprendre les principes de mise en œuvre sous-jacents du middleware Tomcat, nous devons explorer ses composants principaux et son mécanisme de fonctionnement. Cet article analysera les principes de mise en œuvre sous-jacents du middleware Tomcat à travers des exemples de code spécifiques. Tom

Principes d'optimisation et de mise en œuvre : tri rapide en Java Principes d'optimisation et de mise en œuvre : tri rapide en Java Feb 20, 2024 pm 01:24 PM

Principe de mise en œuvre et optimisation de la fonction de tri rapide Java Le tri rapide est un algorithme de tri efficace. Son idée de mise en œuvre est de diviser un gros problème en plusieurs petits problèmes via la méthode diviser pour mieux régner, et de résoudre les sous-problèmes de manière récursive pour finalement obtenir la solution globale. . Lors d'un tri rapide, nous devons sélectionner un élément de référence et diviser le tableau en deux parties, une partie est plus petite que l'élément de référence et l'autre partie est plus grande que l'élément de référence. Les deux parties sont ensuite rapidement triées à nouveau jusqu'à ce qu'il n'y ait qu'un seul élément par sous-problème. Enfin, les solutions de tous les sous-problèmes sont combinées pour obtenir le résultat du tableau.

Principe de mise en œuvre de l'opération d'exponentiation en langage C Principe de mise en œuvre de l'opération d'exponentiation en langage C Feb 20, 2024 pm 09:57 PM

Le principe de mise en œuvre de l'opération d'exponentiation en langage C. En langage C, l'opération d'exponentiation consiste à calculer la nième puissance d'un nombre, c'est-à-dire le résultat du calcul de x^n. Bien que le langage C lui-même ne fournisse pas d'opérateur d'exponentiation direct, les opérations d'exponentiation peuvent être implémentées via des méthodes telles que les boucles ou la récursivité. 1. Méthode de boucle pour mettre en œuvre une opération d'exponentiation La méthode de boucle est une méthode relativement courante pour mettre en œuvre une opération d'exponentiation. Son idée de base est de calculer le résultat à travers plusieurs boucles et multiplications cumulatives. L'exemple de code est le suivant : #includedoublepow

See all articles