suchen
HeimWeb-Frontendjs-TutorialDetaillierte Erläuterung von Beispielen für Konstruktoren und neue Operatoren in JavaScript


Detaillierte Erläuterung von Beispielen für Konstruktoren und neue Operatoren in JavaScript

{…} Die Syntax ermöglicht die Erstellung eines Objekts. Wenn wir jedoch mehrere ähnliche Objekte erstellen müssen, Wir erfordern die Verwendung eines Konstruktors und eines „neuen“ Operators.

Konstruktor

Konstruktor ist technisch gesehen eine normale Funktion, es gibt jedoch im Allgemeinen zwei Konventionen:
1 Der erste Buchstabe ihres Namens wird großgeschrieben.
2. Sie sollten nur mit dem neuen Operator ausgeführt werden.

Beispiel:

function User(name) {
  this.name = name;
  this.isAdmin = false;
}

let user = new User("Jack");

alert(user.name); // Jack
alert(user.isAdmin); // false

Werfen wir einen Blick darauf, was hinter den Kulissen geschieht, wenn new User() ausgeführt wird?
1. Erstellen Sie zunächst ein leeres Objekt und weisen Sie es dann diesem zu.
2. Führen Sie die Funktion aus, ändern Sie normalerweise dieses Objekt und fügen Sie einige neue Attribute hinzu.
3. Dies wird zurückgegeben.

Mit anderen Worten, der Inhalt von new User() ist wie folgt:

function User(name) {
  // this = {};  (implicitly)

  // we add properties to this
  this.name = name;
  this.isAdmin = false;

  // return this;  (implicitly)
}

Das Ergebnis von new User("Jack") stimmt also mit dem folgenden Code überein:

let user = {
  name: "Jack",
  isAdmin: false
};

Wenn wir nun andere Objekte erstellen möchten, können wir new User("Ann"), new User("Alice") usw. verwenden. Kürzer und einfacher zu lesen, als jedes Mal Text zur Beschreibung eines Objekts zu verwenden.
Der Hauptzweck des Konstruktors besteht derzeit darin, die Wiederverwendung von Code zum Erstellen von Objekten zu erreichen.

Beachten wir noch einmal:
Technisch gesehen kann jede Funktion als Konstruktor verwendet werden, d. h. jede Funktion kann mit new aufgerufen werden und auch den oben beschriebenen Algorithmus ausführen.
Die Großschreibung des ersten Buchstabens ist nur eine allgemeine Konvention, um klarer zu machen, dass es sich um einen koreanischen Konstruktor handelt und mit new aufgerufen werden sollte.

new function(){…}
Wenn wir mehrere Codezeilen zum Erstellen eines komplexen Objekts haben, können wir sie mit einem Konstruktor umschließen. Der Code lautet wie folgt:

  let user = new function() { 
     this.name = “John”; 
     this.isAdmin = false;
  // ...other code for user creation
  // maybe complex logic and statements
  // local variables etc
};

Der Konstruktor kann nicht erneut aufgerufen werden, da er nicht gespeichert ist und nur zum Erstellen des Objekts aufgerufen wird. Der Zweck dieser Technik besteht einfach darin, einen einzelnen komplexen Objektcode zu kapseln.

Konstruktor mit doppeltem Verwendungszweck: new.target

Innerhalb der Funktion können wir prüfen, ob die aufrufende Methode die neue Methode verwendet. Dies ist über ein spezielles Attribut new.target möglich.
Der Wert ist leer, wenn er normal aufgerufen wird, und der Wert ist die Funktion, wenn er über new aufgerufen wird.

function User() {
  alert(new.target);
}

User(); // undefined
new User(); // function User { ... }

Der folgende Code kann mit der herkömmlichen Methode und der neuen Betriebsmethode den gleichen Effekt erzielen.

function User(name) {
  if (!new.target) { // if you run me without new
    return new User(name); // ...I will add new for you
  }

  this.name = name;
}

let john = User("John"); // redirects call to new User
alert(john.name); // John

Diese Methode wird in einigen Bibliotheken verwendet, um den Code flexibler zu gestalten. Für diejenigen, die mit der internen Situation des Benutzerobjekts vertraut sind, ist es jedoch nicht sinnvoll, es überall zu verwenden.

Konstruktor-Rückgabewert

Normalerweise benötigen Konstruktoren keine Rückgabewertanweisung. Seine Aufgabe besteht darin, einige notwendige Inhalte in dieses Objekt zu schreiben und es dann automatisch zurückzugeben.
Aber wenn es eine return-Anweisung gibt, ist die Regel einfach:
- Wenn return ein Objekt zurückgibt, wird stattdessen dieses zurückgegeben.
- Wenn return einen primitiven Typ zurückgibt, wird dieser ignoriert und dieser wird trotzdem zurückgegeben.

Mit anderen Worten, return gibt entweder ein Objekt oder dieses zurück. Das folgende Beispiel lautet wie folgt:

function BigUser() {

  this.name = "John";

  return { name: "Godzilla" };  // <-- returns an object
}

alert( new BigUser().name );  // Godzilla, got that object

Dieses Beispiel gibt leer zurück oder ist Einen primitiven Typ schreiben, spielt in der Tat keine Rolle.

function SmallUser() {

  this.name = "John";

  return; // finishes the execution, returns this

  // ...

}

alert( new SmallUser().name );  // John

Die meisten Konstrukteure müssen nicht zurückkehren, dieses besondere Verhalten wird hier nur der intellektuellen Vollständigkeit halber in Erinnerung gerufen.

Ignorieren Sie die Klammern
Übrigens können wir beim Aufruf des Konstruktors die Klammern nach der Objektkennung weglassen, wenn keine Parameter vorhanden sind.

let user = new User; // <-- no brackets
// same as
let user = new User();

Das Ignorieren von Klammern ist kein guter Codierungsstil, aber in der Spezifikation zulässig.

Methoden in Konstruktoren

Die Verwendung von Konstruktoren zum Erstellen von Objekten bietet große Flexibilität, und verschiedene Objekte können durch die Bereitstellung von Parametern definiert werden.
Natürlich fügen wir dazu nicht nur Attribute hinzu, sondern auch Methoden.

Das folgende Beispiel erstellt ein Objekt, verwendet den Namensparameter und fügt eine Methode sayHi hinzu:

function User(name) {
  this.name = name;

  this.sayHi = function() {
    alert( "My name is: " + this.name );
  };
}

let john = new User("John");

john.sayHi(); // My name is: John

/*
john = {
   name: "John",
   sayHi: function() { ... }
}
*/

Zusammenfassung

  • Konstruktor oder Konstruktor für Kurz gesagt, es handelt sich um eine gewöhnliche Funktion, aber es gibt eine allgemeine Konvention, dass der erste Buchstabe des Namens großgeschrieben wird.

  • Der Konstruktor wird mit new aufgerufen, der zunächst ein leeres this-Objekt erstellt und dieses dann mit gefülltem Inhalt zurückgibt.

Wir können den Konstruktor verwenden, um mehrere ähnliche Objekte zu erstellen. Dies ist nicht der einzige Inhalt des Tages, der später näher erläutert wird.
Javascript stellt Konstruktoren für einige integrierte Objekte bereit, z. B. Date, Set usw.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung von Beispielen für Konstruktoren und neue Operatoren in JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
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
es6数组怎么去掉重复并且重新排序es6数组怎么去掉重复并且重新排序May 05, 2022 pm 07:08 PM

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

JavaScript的Symbol类型、隐藏属性及全局注册表详解JavaScript的Symbol类型、隐藏属性及全局注册表详解Jun 02, 2022 am 11:50 AM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

原来利用纯CSS也能实现文字轮播与图片轮播!原来利用纯CSS也能实现文字轮播与图片轮播!Jun 10, 2022 pm 01:00 PM

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

JavaScript对象的构造函数和new操作符(实例详解)JavaScript对象的构造函数和new操作符(实例详解)May 10, 2022 pm 06:16 PM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

JavaScript面向对象详细解析之属性描述符JavaScript面向对象详细解析之属性描述符May 27, 2022 pm 05:29 PM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

javascript怎么移除元素点击事件javascript怎么移除元素点击事件Apr 11, 2022 pm 04:51 PM

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

整理总结JavaScript常见的BOM操作整理总结JavaScript常见的BOM操作Jun 01, 2022 am 11:43 AM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。

foreach是es6里的吗foreach是es6里的吗May 05, 2022 pm 05:59 PM

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor

Dreamweaver Mac

Dreamweaver Mac

Visuelle Webentwicklungstools

PHPStorm Mac-Version

PHPStorm Mac-Version

Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.