Heim > Web-Frontend > js-Tutorial > Hauptteil

So verwenden Sie den Konstruktor, um Objekte in JavaScript ohne neue zu erstellen

高洛峰
Freigeben: 2016-11-26 09:14:42
Original
1051 Leute haben es durchsucht

Beim Erstellen von Objekten in JS können direkte Mengen direkt verwendet werden. Hier wird die Definition eines Konstruktors (einer Funktion) besprochen. Wie folgt
function Person(name, age) {
this.name = name;
this.age = age;
}
var p = new Person('lily', 20) ;

Es ist seltsam, dass einige Bibliothekscodes reguläre Objekte ohne neue erstellen. Wie folgt:
var reg = RegExp('^he$');

Der Test ergab, dass die endgültig zurückgegebenen Objekte unabhängig davon, ob new verwendet wird oder nicht, reguläre Objekte sind und der Typ von ihnen alle „Objekt“ ist. .
var reg1 = new RegExp('^he$');
var reg2 = RegExp('^he$');
reg1.test('he'); // true
reg2 .test('he'); // true
console.log(typeof reg1); // object
console.log(typeof reg2); // object

Hmm, ziemlich gut, Der Code läuft einwandfrei.
Wenn dies der Fall ist, schreiben Sie einfach überhaupt nichts Neues, um die Menge an Code zu sparen. Gilt das auch für andere Typen? Versuchen Sie es mit String/Zahl/Boolean.
var str1 = new String(1);
var str2 = String(1);
var num1 = new Number('1');
var num2 = Number('1');
var boo1 = new Boolean(1);
var boo2 = Boolean(1);
console.log(typeof str1); // object
console.log(typeof str2); string
console.log(typeof num1); // object
console.log(typeof num2); // number
console.log(typeof boo1); // object
console.log( typeof boo2); // boolean

Sie können sehen, dass es sich vom regulären Fall unterscheidet. Unabhängig davon, ob es neu ist oder nicht, folgt auf „typeof“ regelmäßig ein Objekt.
Aber für die Typen String/Number/Boolean gibt der neue Objekttyp „object“ und der nicht neue Typ „string“ zurück.
Das heißt, wenn new nicht anwendbar ist, können andere Typen in Zeichenfolgen-, Zahlen- und boolesche Typen konvertiert werden.

Okay, kehren wir zur Person-Klasse am Anfang des Kapitels zurück. Das heißt, können die Klassen, die wir selbst schreiben, Objekte generieren, ohne den neuen Operator zu verwenden?
function Person(name, age) {
this.name = name;
this.age = age;
}
var p = Person('lily', 20);
console.log(p); // undefiniert

gibt undefiniert zurück, was offensichtlich nicht möglich ist. Daher ist es fantasievoll, eine Person-Instanz zu erstellen, ohne new zu verwenden.
Was ist, wenn es realisiert werden muss? Tatsächlich funktioniert es wie folgt
function Person(name, age) {
this.name = name;
this.age = age;
if (this===window) {
return new Person(name, age);
}
}
var p = Person('lily', 20); // object

hat die Person-Klasse leicht verändert. Tatsächlich wird intern unterschieden, ob Person als Konstruktor oder als Funktion ausgeführt wird.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!