Heim > Artikel > Web-Frontend > Sollte ich beim Erstellen von Objekten in js neue hinzufügen?
Dieser Artikel enthält hauptsächlich eine detaillierte Analyse des Problems des Hinzufügens neuer oder Nicht-Hinzufügens neuer Objekte zum vom js-Konstruktor erstellten Objekt. Wenn Sie an diesem Aspekt interessiert sind, lesen Sie ihn bitte.
Ich habe heute diese Frage gesehen:
Füllen Sie den Inhalt bei „TO DO“ aus, damit der folgende Code a.name = „name1“ unterstützt. ;
function Obj(name){ // TO DO } obj. /* TO DO */ = "name2"; var a = Obj("name1"); var b = new Obj;
Frage 1: Was macht der neue Betreiber?
Erstellen Sie ein neues Objekt.
Weisen Sie den Bereich des Konstruktors dem neuen Objekt zu (damit dieser auf das neue Objekt zeigt).
Führen Sie den Konstruktor aus Code ein (Eigenschaften zu diesem neuen Objekt hinzufügen);
gibt das neue Objekt zurück.
Frage 2: Was passiert, wenn der Konstruktor direkt ohne den neuen Operator ausgeführt wird?
function Obj(name){ this.name = name; console.log(this); // 严格模式下是undefined 非严格模式下是window对象 } var a = Obj("name1"); console.log(a); // 结果 => undefined
Oh, es stellt sich heraus, dass es nur als normaler Funktionsaufruf ausgeführt wird. Obj hat keinen Rückgabewert, also ist a undefiniert.
Zusammenfassung des Unterschieds zwischen den beiden
Verwenden Sie den neuen Operator, um ein Objekt zu erstellen, und der Konstruktor hat keinen Rückgabewert oder gibt einen Basisdatentyp zurück, dann wird das Objekt zurückgegeben, wie in das folgende Beispiel:
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); // 同上
Wenn der Konstruktor einen Referenztyp zurückgibt:
function Obj(name){ this.name = name; return {}; } var b = new Obj; console.log(b); // {}
Zusammenfassung
Für die Ausführung des Konstruktors ohne Hinzufügen von new ist der Rückgabewert das Ausführungsergebnis des Konstruktor; zur Ausführung mit dem neuen Schlüsselwort. Wenn der Rückgabewert ein Basisdatentyp ist, wird der Rückgabewert ignoriert. Wenn der Rückgabewert ein Referenztyp ist, wird der Referenztyp zurückgegeben.
Haben Sie die Antwort auf die Frage?
Referenzantwort:
function Obj(name){ this.name = name; return this; } Obj.prototype.name = "name2"; var a = Obj("name1"); var b = new Obj;
Das Obige habe ich für alle zusammengestellt. Ich hoffe, dass es in Zukunft für alle hilfreich sein wird.
Verwandte Artikel:
So implementieren Sie die Bildvorschaufunktion im WeChat-Applet
So verwenden Sie die Bildanmerkungskomponente in jquery .picsign
Wie verpacke ich die KOA2-Framework-App über Webpack? Was soll ich tun?
Detaillierte Interpretation der Entwicklungsideen für Vue-Komponenten
Das obige ist der detaillierte Inhalt vonSollte ich beim Erstellen von Objekten in js neue hinzufügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!