Heim Web-Frontend js-Tutorial Detaillierte Erläuterung neuer Funktionen und destrukturierende Zuweisung von Objekten in ES6 (Codebeispiel)

Detaillierte Erläuterung neuer Funktionen und destrukturierende Zuweisung von Objekten in ES6 (Codebeispiel)

Oct 20, 2018 pm 04:04 PM
es6 javascript node.js

Dieser Artikel enthält eine detaillierte Erklärung (Codebeispiel) der neuen Funktionen und der Destrukturierungszuweisung von Objekten. Ich hoffe, dass er für Sie hilfreich ist.

ES6 verbessert die Verwendung von Objekten durch wörtliche Syntaxerweiterung, neue Methoden, verbesserte Prototypen usw. und vereinfacht den Datenextraktionsprozess von Objekten durch Dekonstruktion.

Literale Syntaxerweiterung

Die Verwendung von Literalen zum Erstellen von Objekten im ES6-Modus ist prägnanter. Bei Objekteigenschaften kann der Anfangswert der Eigenschaft abgekürzt und verwendet werden Berechneter Eigenschaftsname. Bei der Definition von Objektmethoden werden Doppelpunkte und Funktionsschlüsselwörter eliminiert:

1

2

3

4

5

6

7

8

9

10

11

12

// Demo1

var value = "name", age = 18

var person = {

  age, // age: age

  ['my' + value]: 'Jenny',  // myname

  sayName () {  // sayName: function()

    console.log(this.myname)

  }

}

console.log(person.age) // 18

console.log(person.myname) // Jenny

person.sayName(); // Jenny

Nach dem Login kopieren

Für wiederholt definierte Objektliteralattribute führt der strenge ES5-Modus Prüfungen auf doppelte Attribute durch und löst einen Fehler aus ES6 hat diesen Mechanismus entfernt, unabhängig vom strikten oder nicht strikten Modus, Attribute mit demselben Namen nehmen den letzten Wert an.

1

2

3

4

5

6

7

// demo2

var person = {

  ['my' + value]: 'Jenny',

  myname: 'Tom',

  myname: 'Lee',

}

console.log(person.myname) // Lee

Nach dem Login kopieren

Neue Methoden

Ein Designziel, das seit ES5 verfolgt wird, besteht darin, die Erstellung neuer globaler Funktionen zu vermeiden und keine neuen Methoden für object.prototype zu erstellen.
Um die Implementierung bestimmter Aufgaben zu erleichtern, führt ES6 einige neue Methoden für das globale Objektobjekt ein.

Object.is( )

ES6 führt die Methode Object.is() ein, um die ungenaue Berechnung des Gleichheitsoperators zu kompensieren.

Der Kongruenzoperator löst beim Vergleich keine Typumwandlung aus. Die Ergebnisse von Object.is() sind ähnlich, jedoch für +0 und -0 (zwei verschiedene Entitäten in der JS-Engine) und spezielle Die Vergleichsergebnisse von Die Werte NaN sind unterschiedlich, wie im Beispiel gezeigt:

1

2

3

4

5

6

7

8

9

10

11

12

// demo3

console.log(5 == '5'// true

console.log(5 === '5'// false

console.log(Object.is(5, '5')) // false

 

console.log(+0 == -0) // true

console.log(+0 === -0) // true

console.log(Object.is(+0, -0)) // false

 

console.log(NaN == NaN) // false

console.log(NaN === NaN) // false

console.log(Object.is(NaN, NaN)) // true

Nach dem Login kopieren

Zusammenfassend führt Object.is() eine strengere Gleichheitsbeurteilung aller Werte durch. Ob Object.is() anstelle des Gleichheitsoperators (===) verwendet werden soll, hängt natürlich davon ab, ob sich diese Sonderfälle auf Ihren Code auswirken.

Object.assign( )

ES6 fügt Object.assign() hinzu, um den Mixin-Modus zu implementieren, bei dem ein Objekt die Eigenschaften und Methoden eines anderen Objekts empfängt. Beachten Sie, dass es empfangen und nicht vererbt wird. Beispielsweise wird das Objekt in Demo1 empfangen:

1

2

3

4

5

6

// demo4

var friend = {}

Object.assign(friend, person)

friend.sayName() // Jenny

console.log(friend.age) // 18

console.log(Object.getPrototypeOf(friend) === person) // false

Nach dem Login kopieren

Vor Object.assign() haben viele JS-Bibliotheken die Mischmethode mixin() angepasst, um die Objektkombination zu implementieren :

1

2

3

4

5

6

function mixin(receiver, supplier) {

  Object.keys(supplier).forEach(function (key) {

    receiver[key] = supplier[key]

  })

  return receiver

}

Nach dem Login kopieren

Es ist ersichtlich, dass die Methode mixin() die Zuweisungsoperation „=" verwendet und das Accessor-Attribut nicht kopieren kann führt nur den Zuweisungsvorgang aus. Die Empfängereigenschaften werden schließlich in Dateneigenschaften des empfangenden Objekts umgewandelt. Ein Beispiel lautet wie folgt:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

// demo5

var animal = {

  name: 'lili',

  get type () {

    return this.name + type

  },

  set type (news) {

    type = news

  }

}

animal.type = 'cat'

console.log(animal.type) // lilicat

 

var pet = {}

Object.assign(pet, animal)

console.log(animal) // { name: 'lili', type: [Getter/Setter] }

console.log(pet) // { name: 'lili', type: 'lilicat' }

Nach dem Login kopieren
Object.assign()Object.setPrototypeOf( )

Normalerweise wird der Prototyp angegeben, wenn er über den Konstruktor oder Object.create() erstellt wird. ES6 fügt die Methode Object.setPrototypeOf() hinzu, um den Prototyp eines Objekts zu ändern.

Erstellen Sie beispielsweise ein Codiererobjekt, das das Personenobjekt erbt, und ändern Sie dann den Prototyp des Codiererobjekts:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

// demo6

let person = {

  myname: 'Jenny',

  sayName () { 

    console.log(this.myname)

  }

}

 

// 创建原型为 person 的 coder 对象

let coder = Object.create(person) 

coder.sayName() // Jenny

console.log(Object.getPrototypeOf(coder) === person) // true

 

let hero = {

  myname: 'lee',

  sayName () {

    console.log(this.myname)

  }

}

 

// 改变 coder 对象的原型为 hero

Object.setPrototypeOf(coder, hero)

coder.sayName() // lee

console.log(Object.getPrototypeOf(coder) === hero) // true

Nach dem Login kopieren

Der Objektprototyp wird in der internen proprietären Eigenschaft [[Prototyp]] gespeichert. ], rufen Sie Object.getPrototypeOf() auf, geben Sie den darin gespeicherten Wert zurück und rufen Sie Object.setPrototypeOf() auf, um seinen Wert zu ändern. Diese Methode stärkt den Betrieb von Objektprototypen. Der nächste Abschnitt konzentriert sich auf andere Möglichkeiten zum Betrieb von Prototypen.

Erweiterter Objektprototyp

Prototyp ist die Grundlage der JS-Vererbung. ES6 hat viele Verbesserungen am Prototyp vorgenommen, um den Prototyp flexibler zu nutzen. Zusätzlich zum neuen Object.setPrototypeOf() zum Ändern des Prototyps wird auch das Super-Schlüsselwort eingeführt, um den Zugriff auf den Prototyp zu vereinfachen.

Super-Schlüsselwort

ES6 führt Super ein, um auf den Objektprototyp zuzugreifen Bequemer: Im vorherigen Abschnitt wurde vorgestellt, dass ES5 Object.getPrototypeOf() verwenden kann, um den Objektprototyp zurückzugeben. Ein Beispiel veranschaulicht die Zweckmäßigkeit von Super. Wenn ein Objekt Prototypmethoden wiederverwenden und seine eigenen Methoden neu definieren muss, lauten die beiden Implementierungsmethoden wie folgt:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

// demo7

let coder1 = {

  getName () {

    console.log("coder1 name: ")

    Object.getPrototypeOf(this).sayName.call(this)

  }

}

 

// 设置 coder1 对象的原型为 hero(demo6)

Object.setPrototypeOf(coder1, hero)

coder1.getName() // coder1 name: lee

 

let coder2 = {

  getName () {

    console.log("coder2 name: ")

    super.sayName()

  }

}

 

Object.setPrototypeOf(coder2, hero)

coder2.getName() // coder2 name: lee

Nach dem Login kopieren

Rufen Sie in der getName-Methode des coder1-Objekts (this) auf. Es ist auch erforderlich, sicherzustellen, dass es verwendet wird. Die Prototypmethode ist relativ kompliziert, und bei der Mehrfachvererbung treten rekursive Aufrufstapel-Überlauffehler auf. Die direkte Verwendung von Super ist jedoch sehr einfach und sicher.

Beachten Sie, dass Super in der Abkürzungsmethode verwendet werden muss, da sonst ein Fehler gemeldet wird. Beispielsweise weist der folgende Code beim Ausführen einen Syntaxfehler auf:

1

2

3

4

let coder4= {

  getName: function () { // getName () 正确

    super.sayName() // SyntaxError: 'super' keyword unexpected here

  }

Nach dem Login kopieren

Weil im Beispiel getName wird Ein von der anonymen Funktion definiertes Attribut. Im aktuellen Kontext ist es illegal, eine Super-Referenz aufzurufen. Wenn Sie es nicht verstehen, können Sie sich die abhängigen Objekte der Methode genauer ansehen.

Untergeordnete Objekte von Methoden

Vor ES6 waren „Methoden“ Objekteigenschaften mit Funktionen und nicht mit Daten. In ES6 wurden Methoden offiziell so definiert, dass sie [[HomeObject]] innerhalb eines Attributs haben Funktionen. Das Attribut

[[HomeObject]] speichert das untergeordnete Objekt der aktuellen Methode, zum Beispiel:

1

2

3

4

5

6

7

8

9

let coder5 = {

  sayName () {

    console.log("I have HomeObject")

  }

}

 

function shareName () {

    console.log("No HomeObject")

}

Nach dem Login kopieren

coder5 Der Attributwert [[HomeObject]] der Methode sayName() des Objekts ist coder5, und die definierte Funktion shareName() weist es dem Objekt nicht zu, sodass seine [[HomeObject]]-Eigenschaft nicht definiert ist, was bei Verwendung von Super wichtig ist.

Super besteht darin, Object.getPrototypeOf() für das Attribut [[HomeObject]] aufzurufen, um die Prototypreferenz zu erhalten, dann den Prototyp zu durchsuchen, um die Funktion mit demselben Namen zu erhalten, und schließlich diese Bindung so festzulegen, dass sie aufgerufen wird entsprechende Methode.

Destrukturierende Zuweisung

ES6 bietet eine neue Funktion für Array- und Objektliterale – Destrukturierung, die den Prozess der Datenextraktion vereinfachen und homogenen Code reduzieren kann. Ein grundlegendes Syntaxbeispiel für die Destrukturierung lautet wie folgt:

1

2

3

4

5

6

let user = {

  name: 'jenny',

  id: 18

}

let {name, id} = user

console.log(name, id) // jenny 18

Nach dem Login kopieren

注意在这段代码中,user.name 存储在与对象属性名同名的 name 变量中。

默认值

如果解构时变量名称与对象属性名不同,即在对象中不存在,那么这个变量会默认为undefined:

1

2

3

4

5

6

let user = {

  name: 'jenny',

  id: 18

}

let {name, id, job} = user

console.log(name, id, job) // jenny 18 undefined

Nach dem Login kopieren

非同名变量赋值

非同名变量的默认值为undefined,但更多时候是需要为其赋值的,并且会将对象属性值赋值给非同名变量。ES6 为此提供了扩展语法,与对象字面量属性初始化程序很像:

1

2

3

4

5

6

7

8

9

10

11

12

let user = {

  name: 'jenny',

  id: 18

}

let {name, id = 16, job = 'engineer'} = user

console.log(name, id, job) // jenny 18 engineer

 

let {name: localName, id: localId} = user

console.log(localName, localId) // jenny 18

 

let {name: otherName = 'lee', job: otherJob = 'teacher'} = user

console.log(otherName, otherJob) // jenny teacher

Nach dem Login kopieren

可以看出这种语法实际与对象字面量相反,赋值名在冒号左,变量名在右,并且解构赋值时,只是更新了默认值,不能覆盖对象原有的属性值。

嵌套解构

解构嵌套对象的语法仍然类似对象字面量,使用花括号继续查找下层结构:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

let user = {

  name: 'jenny',

  id: 18,

  desc: {

    pos: {

      lng: 111,

      lat: 333

    }

  }

}

 

let {desc: {pos}} = user

console.log(pos) // { lng: 111, lat: 333 }

 

let {desc: {pos: {lng}}} = user

console.log(lng) // 111

 

let {desc: {pos: {lng: longitude}}} = user

console.log(longitude) // 111

Nach dem Login kopieren

对象类别

ES6 规范定义了对象的类别,特别是针对浏览器这样的执行环境。

普通(Ordinary)对象
具有 JS 对象所有的默认内部行为

特异(Exotic)对象
具有某些与默认行为不符的内部行为

标准(Standard)对象
ES6 规范中定义的对象
可以是普通对象或特异对象,例如 Date、Array 等

内建对象
脚本开始执行时存在于 JS 执行环境中的对象
所有标准对象都是内建对象

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung neuer Funktionen und destrukturierende Zuweisung von Objekten in ES6 (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

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

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So implementieren Sie ein Online-Spracherkennungssystem mit WebSocket und JavaScript So implementieren Sie ein Online-Spracherkennungssystem mit WebSocket und JavaScript Dec 17, 2023 pm 02:54 PM

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 Implementierung von Echtzeitüberwachungssystemen WebSocket und JavaScript: Schlüsseltechnologien zur Implementierung von Echtzeitüberwachungssystemen Dec 17, 2023 pm 05:30 PM

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

Verwendung von JavaScript und WebSocket zur Implementierung eines Echtzeit-Online-Bestellsystems Verwendung von JavaScript und WebSocket zur Implementierung eines Echtzeit-Online-Bestellsystems Dec 17, 2023 pm 12:09 PM

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 So implementieren Sie ein Online-Reservierungssystem mit WebSocket und JavaScript Dec 17, 2023 am 09:39 AM

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 JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems Dec 17, 2023 pm 05:13 PM

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

Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Jan 05, 2024 pm 06:08 PM

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

So verwenden Sie insertBefore in Javascript So verwenden Sie insertBefore in Javascript Nov 24, 2023 am 11:56 AM

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 und WebSocket: Aufbau eines effizienten Echtzeit-Bildverarbeitungssystems JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Bildverarbeitungssystems Dec 17, 2023 am 08:41 AM

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

See all articles