Cet article vous donne principalement une analyse détaillée du problème de l'ajout ou non de nouveau à l'objet créé par le constructeur js. Si cet aspect vous intéresse, veuillez vous y référer.
J'ai vu cette question aujourd'hui :
Remplissez le contenu de "TO DO" pour que le code suivant prenne en charge a.name = "name1" b.name = "name2" ; ;
function Obj(name){ // TO DO } obj. /* TO DO */ = "name2"; var a = Obj("name1"); var b = new Obj;
Question 1 : Que fait le nouvel opérateur ?
Créer un nouvel objet
Attribuer la portée du constructeur au nouvel objet (pour que cela pointe vers le nouvel objet
Exécuter le constructeur) ; code in (ajouter des propriétés à ce nouvel objet);
renvoie le nouvel objet.
Question 2 : Que se passera-t-il si le constructeur est exécuté directement sans l'opérateur new ?
function Obj(name){ this.name = name; console.log(this); // 严格模式下是undefined 非严格模式下是window对象 } var a = Obj("name1"); console.log(a); // 结果 => undefined
Oh, il s'avère qu'il est simplement exécuté comme un appel de fonction normal. Obj n'a pas de valeur de retour, donc a n'est pas défini.
Résumé de la différence entre les deux
Utilisez l'opérateur new pour créer un objet, et le constructeur n'a pas de valeur de retour ou renvoie un type de données de base, puis l'objet est renvoyé, comme dans l'exemple suivant :
function Obj(name){ this.name = name; } var b = new Obj; console.log(b); // Obj { name: undefined } function Obj(name){ this.name = name; return 'chic'; } var b = new Obj; console.log(b); // 同上
Si le constructeur renvoie un type référence :
function Obj(name){ this.name = name; return {}; } var b = new Obj; console.log(b); // {}
Résumé
Pour exécuter le constructeur sans ajouter de nouveau, la valeur de retour est la résultat de l'exécution du constructeur ; pour ajouter un nouveau mot-clé pour exécuter le constructeur, si le retour est un type de données de base, alors la valeur de retour est ignorée, si un type de référence est renvoyé, alors le type de référence est renvoyé.
Alors, avez-vous la réponse à la question ?
Réponse de référence :
function Obj(name){ this.name = name; return this; } Obj.prototype.name = "name2"; var a = Obj("name1"); var b = new Obj;
Ce qui précède est ce que j'ai compilé pour tout le monde. J'espère que cela sera utile à tout le monde à l'avenir.
Articles connexes :
Comment implémenter la fonction d'aperçu d'image dans l'applet WeChat
Comment utiliser le composant d'annotation d'image dans jquery .picsign
Comment empaqueter l'application framework koa2 via webpack Que dois-je faire ?
Interprétation détaillée des idées de développement de composants Vue
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!