Erfahren Sie mehr über Konstruktoren in JavaScript
Ein gutes Verständnis der Konstruktoren ist der Schlüssel zur Beherrschung der JavaScript-Sprache. Wir alle wissen, dass JavaScript nicht wie andere Sprachen ist. Es verfügt nicht über das Schlüsselwort class, sondern über einen Konstruktor, der der Funktion sehr ähnlich ist. In diesem Artikel erfahren wir im Detail, wie JavaScript-Konstruktoren Objekte erstellen.
Konstruktoren sind gewöhnlichen Funktionen sehr ähnlich, wir verwenden sie jedoch über das Schlüsselwort new. Es gibt zwei Haupttypen von Konstruktoren: native Konstruktoren (Array, Object), die automatisch in der Ausführungsumgebung generiert werden können, und benutzerdefinierte Konstruktoren, mit denen Sie Ihre eigenen Methoden und Eigenschaften definieren können.
Die Verwendung von Konstruktoren ist sehr effektiv, wenn Sie viele ähnliche Objekte (mit denselben Eigenschaften und Methoden) erstellen möchten. Die meisten Programmierer folgen der Konvention, einen Großbuchstaben zu verwenden, um Konstruktoren von gewöhnlichen Funktionen zu unterscheiden. Schauen Sie sich den Code unten an.
function Book() { // unfinished code } var myBook = new Book();
Die letzte Codezeile erstellt ein Book-Objekt und weist es einer Variablen zu. Nachdem dies abgeschlossen ist, ist myBook auch eine Book-Instanz, selbst wenn der Book-Konstruktor nichts tut. Wie Sie sehen, gibt es abgesehen von der Großschreibung des ersten Buchstabens und der Verwendung des Schlüsselworts new keinen Unterschied zwischen Konstruktoren und gewöhnlichen Funktionen.
Um den Typ der Instanz zu bestimmen
Um festzustellen, ob ein Objekt eine Instanz irgendeiner Art ist, können wir den Operator instanceof
verwenden: instanceof
操作符:
myBook instanceof Book // => true myBook instanceof String // => false
注意:如果右边不是一个函数的实例,那么将会报错:
myBook instanceof {}; // => TypeError: invalid 'instanceof' operand ({})
另一种方法是使用constructor属性,所有对象实例都有一个constructor属性,这个属性指向创建它的构造函数。
myBook.constructor == Book; // => true
就像myBook的constructor指向Book一样。 所有对象都从它们的原型上继承了constructor这个属性:
var s = new String("text"); s.constructor === String; // => true "text".constructor === String; // => true var o = new Object(); o.constructor === Object; // => true var o = {}; o.constructor === Object; // => true var a = new Array(); a.constructor === Array; // => true [].constructor === Array; // => true
尽管使用constructor可以用来检测实例类型,但是建议还是使用instanceof方法。因为constructor属性是可以被重写的..用起来不太靠谱。
自定义构造函数
构造函数就像饼干印模。同一印模制作出来的,都是同一个diao样(男人没一个好东西也是这个道理)。
function Book(name, year) { this.name = name; this.year = '(' + year + ')'; }
Book构造器需要两个参数,当使用new关键字构造对象时,会把两个形参传给Book对象的name 和 year。
var firstBook = new Book("Pro AngularJS", 2014); var secondBook = new Book("Secrets Of The JavaScript Ninja", 2013); var thirdBook = new Book("JavaScript Patterns", 2010); console.log(firstBook.name, firstBook.year); console.log(secondBook.name, secondBook.year); console.log(thirdBook.name, thirdBook.year);
如你所见,我们可以通过传不同参数,快速创建另一本书。JavaScript的Array(),Date()也是这个道理。
Object.defineProperty 方法
Object.defineProperty 方法可以在构造器中被使用来配置属性。
function Book(name) { Object.defineProperty(this, "name", { get: function() { return "Book: " + name; }, set: function(newName) { name = newName; }, configurable: false }); } var myBook = new Book("Single Page Web Applications"); console.log(myBook.name); // => Book: Single Page Web Applications // we cannot delete the name property because "configurable" is set to false delete myBook.name; console.log(myBook.name); // => Book: Single Page Web Applications // but we can change the value of the name property myBook.name = "Testable JavaScript"; console.log(myBook.name); // => Book: Testable JavaScript
上面的代码中是调用了祖先的方法。它提供了getter和setter接口。getter方法负责返回封装的值,setter方法接受参数,并把值赋给属性。当我们在某个属性上操作存取时,调用的就是这两个方法。通过配置configurable,我们可以设置该值能否被删除。
对象字面量表示法是首选的构造函数
JavaScript语言九种内建的构造器:Object(), Array(), String(), Number(), Boolean(), Date(), Function(), Error() 以及 RegExp()。当我们需要创建这些值的时候,我们可以自由选择使用字面量或者构造器。但是相同情况下,字面量对象不仅易读,而且运行速度更快,因为他们可以在解析的时候被优化。所以当你需要使用简单对象的时候就使用字面量吧。
// a number object // numbers have a toFixed() method var obj = new Object(5); obj.toFixed(2); // => 5.00 // we can achieve the same result using literals var num = 5; num.toFixed(2); // => 5.00 // a string object // strings have a slice() method var obj = new String("text"); obj.slice(0,2); // => "te" // same as above var string = "text"; string.slice(0,2); // => "te"
使用new关键字是必不可少的
记得使用构造器的时候要用new关键字,如果你不小心忘记了,那么构造器中的this指向的是global对象(浏览器中默认为window)。
function Book(name, year) { console.log(this); this.name = name; this.year = year; } var myBook = Book("js book", 2014); console.log(myBook instanceof Book); console.log(window.name, window.year); var myBook = new Book("js book", 2014); console.log(myBook instanceof Book); console.log(myBook.name, myBook.year);
上面的代码运行结果如下所示:
如果是在严格模式下,上面的代码将会抛出错误,因为严格模式不允许我们不使用new关键字调用构造器。
适用范围更高的构造器
为了解决可能会忘记使用new关键字的风险,我们可以通过判断this的值创建适用范围更高的构造器。
function Book(name) { if (!(this instanceof Book)) { // the constructor was called without "new". return new Book(name); } }
加上这段代码之后,我们就可以‘肆无忌惮’地使用构造器了。
function Book(name, year) { if (!(this instanceof Book)) { return new Book(name, year); } this.name = name; this.year = year; } var person1 = new Book("js book", 2014); var person2 = Book("js book", 2014); console.log(person1 instanceof Book); // => true console.log(person2 instanceof Book); // => true
很多内建的构造器都是这么做的。通过判断this
是否为当前类型。如果程序员忘记加new
关键字,那么我们就返回一个通过new
rrreee
🎜🎜Wie Sie sehen, können wir schnell ein weiteres Buch erstellen, indem wir verschiedene Parameter übergeben. Das Gleiche gilt für Array() und Date() von JavaScript.
🎜🎜🎜Object.defineProperty-Methode🎜🎜🎜Die Object.defineProperty-Methode kann im Konstruktor zum Konfigurieren von Eigenschaften verwendet werden. 🎜rrreee🎜Der obige Code ruft die Ancestor-Methode auf. Es bietet Getter- und Setter-Schnittstellen. Die Getter-Methode ist für die Rückgabe des gekapselten Werts verantwortlich, und die Setter-Methode akzeptiert Parameter und weist den Wert der Eigenschaft zu. Wenn wir auf ein bestimmtes Attribut zugreifen, werden diese beiden Methoden aufgerufen. Durch die Konfiguration konfigurierbar können wir festlegen, ob der Wert gelöscht werden kann. 🎜🎜🎜Objektliteraldarstellung ist der bevorzugte Konstruktor 🎜🎜🎜Die JavaScript-Sprache verfügt über neun integrierte Konstruktoren: Object(), Array(), String(), Number(), Boolean(), Date(), Function() , Error() und RegExp(). Wenn wir diese Werte erstellen müssen, können wir Literale oder Konstruktoren verwenden. Unter den gleichen Umständen sind Literalobjekte jedoch nicht nur einfacher zu lesen, sondern auch schneller, da sie beim Parsen optimiert werden können. Verwenden Sie also Literale, wenn Sie einfache Objekte verwenden müssen. 🎜rrreee🎜🎜Die Verwendung des neuen Schlüsselworts ist unerlässlich. 🎜🎜🎜Denken Sie daran, das neue Schlüsselwort zu verwenden, wenn Sie den Konstruktor verwenden. Wenn Sie es versehentlich vergessen haben, verweist dies im Konstruktor auf das globale Objekt (im Browser ist die Standardeinstellung „window“). 🎜rrreee🎜Das Ergebnis der Ausführung des obigen Codes ist wie folgt: 🎜
🎜🎜Wenn es sich im strikten Modus befindet, gibt der obige Code einen Fehler aus, da der strikte Modus die Verwendung von nicht zulässt neues Schlüsselwort Rufen Sie den Konstruktor auf. 🎜🎜🎜Konstruktor mit einem höheren Anwendungsbereich🎜🎜🎜Um das Risiko des Vergessens der Verwendung des neuen Schlüsselworts zu beseitigen, können wir einen Konstruktor mit einem höheren Anwendungsbereich erstellen, indem wir dessen Wert beurteilen. 🎜rrreee🎜Nachdem wir diesen Code hinzugefügt haben, können wir den Konstruktor ohne Einschränkungen verwenden. 🎜rrreee🎜Viele integrierte Konstruktoren tun dies. Durch Beurteilung, ob
this
der aktuelle Typ ist. Wenn der Programmierer vergisst, das Schlüsselwort new
hinzuzufügen, geben wir ein über new
übergebenes Objekt zurück. 🎜
Fazit
JavaScript hat keine Klasse (kann aber objektorientiert sein), daher ist es für Programmierer, die es gewohnt sind, Klassen zu verwenden, verwirrend. Natürlich unterscheiden sich JavaScript-Konstruktoren nicht von gewöhnlichen Funktionen, sie werden lediglich mit dem Schlüsselwort new
generiert. Es ist sehr nützlich, wenn wir „Cookies drucken“ müssen.
Empfohlenes Tutorial: „JavaScript-Video-Tutorial“
Das obige ist der detaillierte Inhalt vonErfahren Sie mehr über Konstruktoren in JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



So implementieren Sie mit WebSocket und JavaScript ein Online-Spracherkennungssystem. Einführung: Mit der kontinuierlichen Weiterentwicklung der Technologie ist die Spracherkennungstechnologie zu einem wichtigen Bestandteil des Bereichs der künstlichen Intelligenz geworden. Das auf WebSocket und JavaScript basierende Online-Spracherkennungssystem zeichnet sich durch geringe Latenz, Echtzeit und plattformübergreifende Eigenschaften aus und hat sich zu einer weit verbreiteten Lösung entwickelt. In diesem Artikel wird erläutert, wie Sie mit WebSocket und JavaScript ein Online-Spracherkennungssystem implementieren.

WebSocket und JavaScript: Schlüsseltechnologien zur Realisierung von Echtzeit-Überwachungssystemen Einführung: Mit der rasanten Entwicklung der Internet-Technologie wurden Echtzeit-Überwachungssysteme in verschiedenen Bereichen weit verbreitet eingesetzt. Eine der Schlüsseltechnologien zur Erzielung einer Echtzeitüberwachung ist die Kombination von WebSocket und JavaScript. In diesem Artikel wird die Anwendung von WebSocket und JavaScript in Echtzeitüberwachungssystemen vorgestellt, Codebeispiele gegeben und deren Implementierungsprinzipien ausführlich erläutert. 1. WebSocket-Technologie

Einführung in die Verwendung von JavaScript und WebSocket zur Implementierung eines Online-Bestellsystems in Echtzeit: Mit der Popularität des Internets und dem Fortschritt der Technologie haben immer mehr Restaurants damit begonnen, Online-Bestelldienste anzubieten. Um ein Echtzeit-Online-Bestellsystem zu implementieren, können wir JavaScript und WebSocket-Technologie verwenden. WebSocket ist ein Vollduplex-Kommunikationsprotokoll, das auf dem TCP-Protokoll basiert und eine bidirektionale Kommunikation zwischen Client und Server in Echtzeit realisieren kann. Im Echtzeit-Online-Bestellsystem, wenn der Benutzer Gerichte auswählt und eine Bestellung aufgibt

So implementieren Sie ein Online-Reservierungssystem mit WebSocket und JavaScript. Im heutigen digitalen Zeitalter müssen immer mehr Unternehmen und Dienste Online-Reservierungsfunktionen bereitstellen. Es ist von entscheidender Bedeutung, ein effizientes Online-Reservierungssystem in Echtzeit zu implementieren. In diesem Artikel wird erläutert, wie Sie mit WebSocket und JavaScript ein Online-Reservierungssystem implementieren, und es werden spezifische Codebeispiele bereitgestellt. 1. Was ist WebSocket? WebSocket ist eine Vollduplex-Methode für eine einzelne TCP-Verbindung.

JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems Einführung: Heutzutage ist die Genauigkeit von Wettervorhersagen für das tägliche Leben und die Entscheidungsfindung von großer Bedeutung. Mit der Weiterentwicklung der Technologie können wir genauere und zuverlässigere Wettervorhersagen liefern, indem wir Wetterdaten in Echtzeit erhalten. In diesem Artikel erfahren Sie, wie Sie mit JavaScript und WebSocket-Technologie ein effizientes Echtzeit-Wettervorhersagesystem aufbauen. In diesem Artikel wird der Implementierungsprozess anhand spezifischer Codebeispiele demonstriert. Wir

JavaScript-Tutorial: So erhalten Sie HTTP-Statuscode. Es sind spezifische Codebeispiele erforderlich. Vorwort: Bei der Webentwicklung ist häufig die Dateninteraktion mit dem Server erforderlich. Bei der Kommunikation mit dem Server müssen wir häufig den zurückgegebenen HTTP-Statuscode abrufen, um festzustellen, ob der Vorgang erfolgreich ist, und die entsprechende Verarbeitung basierend auf verschiedenen Statuscodes durchführen. In diesem Artikel erfahren Sie, wie Sie mit JavaScript HTTP-Statuscodes abrufen und einige praktische Codebeispiele bereitstellen. Verwenden von XMLHttpRequest

Verwendung: In JavaScript wird die Methode insertBefore() verwendet, um einen neuen Knoten in den DOM-Baum einzufügen. Diese Methode erfordert zwei Parameter: den neuen Knoten, der eingefügt werden soll, und den Referenzknoten (d. h. den Knoten, an dem der neue Knoten eingefügt wird).

JavaScript ist eine in der Webentwicklung weit verbreitete Programmiersprache, während WebSocket ein Netzwerkprotokoll für die Echtzeitkommunikation ist. Durch die Kombination der leistungsstarken Funktionen beider können wir ein effizientes Echtzeit-Bildverarbeitungssystem erstellen. In diesem Artikel wird erläutert, wie dieses System mithilfe von JavaScript und WebSocket implementiert wird, und es werden spezifische Codebeispiele bereitgestellt. Zunächst müssen wir die Anforderungen und Ziele des Echtzeit-Bildverarbeitungssystems klären. Angenommen, wir haben ein Kameragerät, das Bilddaten in Echtzeit sammeln kann
