Maison  >  Article  >  interface Web  >  Concernant la création d'objets en js, dois-je en ajouter de nouveaux ?

Concernant la création d'objets en js, dois-je en ajouter de nouveaux ?

亚连
亚连original
2018-06-11 11:58:141933parcourir

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!

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
Article précédent:Comment utiliser réagir+reduxArticle suivant:Comment utiliser réagir+redux