Maison > Questions et réponses > le corps du texte
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 ?
学习ing2017-07-05 10:54:40
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.
高洛峰2017-07-05 10:54:40
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
出来的结果。如果构造函数没有返回对象,那么new
ré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"
女神的闺蜜爱上我2017-07-05 10:54:40
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
習慣沉默2017-07-05 10:54:40
Chaque fonction en js est équivalente à un constructeur (sauf pour la vraie fonction flèche ES6).
Hé, incroyable js !