javascript - N'est-ce pas une fonction littérale d'objet? Pourquoi avez-vous besoin d'une nouvelle initialisation ?
淡淡烟草味
淡淡烟草味 2017-07-05 10:52:40
0
4
863

Je me souviens que ce n'est pas un constructeur. Pourquoi this et new sont-ils utilisés de la même manière que les constructeurs ?

淡淡烟草味
淡淡烟草味

répondre à tous(4)
学习ing

Toute fonction en javascript, utilisez simplement new 关键字调用,它都可以被称作 构造函数.

Lors de l'utilisation du mot-clé new pour appeler une fonction, un objet sera implicitement déclaré à l'intérieur de la fonction, puis l'objet lui sera attribué, et enfin cela sera renvoyé implicitement lors de l'utilisation du nouveau mot-clé pour appeler la méthode du livre de l'auteur. , c'est équivalent au processus suivant.

function Book(id, bookname){
    var o = new Object();
    o.id = id;
    o.bookname = bookname;
    return o;
}
var b = Book(123,'javascript高级程序设计');

Le o ici est en fait cet objet que nous voyons habituellement.

小葫芦

Il n'y a pas de classes ou de constructeurs en JavaScript.

function Book (){}

// Book 是一个函数
typeof Book
"function"

// Book 是 Function
Book instanceof Function
true

// Book 是 Object
Book instanceof Object
true

Utilisez new pour créer des objets

var book = new Book()

// book 是一个对象
typeof book
"object"

// book 不是 Function 的实例
book instanceof Function
false

// book 是 Object 的实例
book instanceof Object
true

// book 是 Book 的实例
book instanceof Book
true

Bien qu'il n'y ait pas de constructeur en js, ce mot est également utilisé dans la documentation MDN : https://developer.mozilla.org...

Lorsque le code new foo(...) est exécuté :

  • Un nouvel objet est créé. Il hérite de foo.prototype.

  • Constructeur foo 被执行。执行的时候,相应的传参会被传入,同时上下文(this)会被指定为这个新实例。new foo 等同于 new foo(), ne peut être utilisé que lorsqu'aucun paramètre n'est transmis.

  • Si le constructeur renvoie un "objet", alors cet objet remplacera l'intégralité du new出来的结果。如果构造函数没有返回对象,那么newrésultat. Si le constructeur ne renvoie pas d'objet, alors le résultat sera l'objet créé à l'étape 1. ps : Généralement, le constructeur ne renvoie aucune valeur, mais si l'utilisateur souhaite remplacer cette valeur de retour, il peut choisir de renvoie un objet normal pour l'écraser. Bien entendu, le retour d'un tableau sera également écrasé, car les tableaux sont également des objets.

Même si ES6 ajoute des classes, ce ne sont que du sucre syntaxique :

class Book{}

typeof Book
"function"
女神的闺蜜爱上我

Vous avez mal compris la notion de constructeur.

En fait, il ne devrait pas y avoir le terme « constructeur » en js, mais doit être compris comme la méthode de construction d'une fonction. Cela signifie que n'importe quelle fonction peut être utilisée et que n'importe quelle fonction peut être appelée un « constructeur ». Lorsque vous avez écrit ce que l'on appelle le « constructeur », avez-vous remarqué une différence entre celui-ci et les fonctions ordinaires ? Non, ce ne sont que des fonctions ordinaires ? new

Ci-dessus, sauf la fonction flèche es6.

習慣沉默

Chaque fonction en js est équivalente à un constructeur (sauf pour la vraie fonction flèche ES6).
Hé, incroyable js !

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal