Maison  >  Article  >  interface Web  >  Explication détaillée du nouvel opérateur en JavaScript

Explication détaillée du nouvel opérateur en JavaScript

小云云
小云云original
2018-02-07 14:43:241650parcourir

Lors de l'instanciation d'un objet en JavaScript, notre méthode courante consiste à utiliser l'opérateur new. Cet article partage principalement avec vous l'explication détaillée du nouvel opérateur en JavaScript, en espérant vous aider.

var Foo = function(x, y) {    this.x = x    this.y = y
}var foo = new Foo(1, 2) // Foo {x: 1, y: 2}

Alors, que fait exactement le nouvel opérateur ? Nous pouvons examiner quel type d'objet foo est.

Premièrement, foo lui-même est un objet, puis il a deux attributs, x et y. Parallèlement, sur la console de la plupart des navigateurs, on peut également voir un attribut légèrement plus léger appelé __proto__. Il possède deux attributs, constructeur et __proto__.

__proto__ est une propriété accesseur. Il pointe vers le [[Prototype]] de l'objet actuel lui-même. Ce [[Prototype]] n'est pas un attribut, c'est juste un symbole qui représente l'objet prototype Foo.prototype du constructeur Foo. Description sur MDN.

foo.__proto__ === Foo.prototype // true
Alors, décrivons généralement

var Foo = function(x, y) {    this.x = x    this.y = y
}// 1. 创建一个空对象var foo = {}// 2. 调用构造函数,并且将构造函数的`this`指向fooFoo.call(foo, 1, 2)// 3. foo继承Foo的原型对象foo.__proto__ = Foo.prototype
, etc. Bien que nous écrivions le dernier foo de cette façon, c'est le même que l'objet qui sort de New FOO ( ), mais la situation est également liée. Ce n'est pas aussi simple.

Nous savons que l'opérateur new exploite une fonction. Dans l'exemple ci-dessus, la fonction Foo ne renvoie explicitement aucune valeur, donc après l'exécution de cette fonction, la valeur de retour n'est pas définie. Lorsque le constructeur ne renvoie pas explicitement une valeur, après avoir effectué la nouvelle opération sur celui-ci, l'objet instancié par le constructeur sera renvoyé.

Et si je renvoie une certaine valeur ?

                                                                                                                                                  

 renvoie une valeur.
var Foo = function(x, y) {    this.x = x    this.y = y    return {        a: this.x
    }
}var foo = new Foo(1, 2) // {a: 1}

Une attention particulière doit être portée au fait que si ce que vous retournez dans le constructeur n'est pas un objet, mais une valeur ordinaire, telle qu'une valeur Number ou String, alors ce qui est renvoyé après new sera toujours un instanciation.

Recommandations associées :

La différence entre le nouvel appel de la fonction js et celui-ci dans un appel ordinaire

À propos des nouveautés de a Parler de BUG

Quel est le processus en cours d'exécution du nouvel opérateur en js

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
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