Welche zwei Kategorien von JavaScript-Objekten gibt es?

青灯夜游
Freigeben: 2022-02-24 16:33:01
Original
2716 Leute haben es durchsucht

Es gibt zwei Arten von Objekten in JavaScript: 1. Hostobjekte sind von der JavaScript-Hostumgebung bereitgestellte Objekte, deren Verhalten vollständig von der Hostumgebung bestimmt wird. 2. Integrierte Objekte sind von der JavaScript-Sprache bereitgestellte Objekte .

Welche zwei Kategorien von JavaScript-Objekten gibt es?

Die Betriebsumgebung dieses Tutorials: Windows 7-System, JavaScript-Version 1.8.5, Dell G3-Computer.

In JavaScript können Objekte in zwei Typen unterteilt werden: Hostobjekte und integrierte Objekte.

  • Hostobjekte: Von der JavaScript-Hostumgebung bereitgestellte Objekte. Ihr Verhalten wird vollständig von der Hostumgebung bestimmt.

  • Eingebaute Objekte: Von der JavaScript-Sprache bereitgestellte Objekte

    • Intrinsische Objekte: Objektinstanzen, die automatisch erstellt werden, wenn die JavaScript-Laufzeitumgebung erstellt wird, spezifiziert durch den Standard.

    • Native Objekte: Objekte, die von Benutzern über integrierte Konstruktoren wie Array und RegExp oder spezielle Syntax erstellt werden können.

    • Gewöhnliche Objekte: Objekte, die mit der {}-Syntax, dem Objektkonstruktor oder der Klassenschlüsselwortdefinitionsklasse erstellt wurden und vom Prototyp geerbt werden können.

Hostobjekt

JavaScript-Hostobjekte sind alle möglichen seltsamen Objekte, aber das bekannteste im Frontend ist zweifellos der Host in der Browserumgebung. In der Browserumgebung wissen wir alle, dass das globale Objekt ein Fenster ist und dass das Fenster viele Eigenschaften hat, z. B. ein Dokument. Tatsächlich stammen ein Teil der Eigenschaften im globalen Objektfenster aus der JavaScript-Sprache und ein Teil aus der Browserumgebung. Globale Objekteigenschaften werden im JavaScript-Standard angegeben und andere Eigenschaften des Window-Objekts werden in verschiedenen W3C-Standards angegeben. Hostobjekte werden ebenfalls in zwei Typen unterteilt: inhärente und vom Benutzer erstellbare Objekte. Beispielsweise kann document.createElement einige DOM-Objekte erstellen. Der Host stellt auch einige Konstruktoren bereit. Beispielsweise können wir neue Image-Elemente verwenden, um img-Elemente zu erstellen. Integrierte Objekte·Intrinsische Objekte

Intrinsische Objekte sind Objektinstanzen, die automatisch erstellt werden, wenn die JavaScript-Laufzeit erstellt wird der Standard. Intrinsische Objekte werden erstellt, bevor JavaScript-Code ausgeführt wird, und sie verhalten sich oft wie Basisbibliotheken. Die zuvor erwähnte „Klasse“ ist eigentlich eine Art inhärentes Objekt. Der ECMA-Standard stellt uns eine intrinsische Objekttabelle mit mehr als 150 intrinsischen Objekten zur Verfügung.

Eingebaute Objekte·Native Objekte

Wir bezeichnen Objekte in JavaScript, die über den Konstruktor der Sprache selbst erstellt werden können, als native Objekte. Im JavaScript-Standard werden mehr als 30 Konstruktoren bereitgestellt. Nach meinem Verständnis und je nach Anwendungsszenario teile ich native Objekte in die folgenden Kategorien ein.

Über diese Konstruktoren können wir die neue Operation verwenden, um neue Objekte zu erstellen. Daher nennen wir diese Objekte native Objekte. Fast alle dieser Konstruktorfunktionen können nicht in reinem JavaScript-Code implementiert werden und sie können nicht mithilfe der Class/Extend-Syntax vererbt werden. Die meisten von diesen Konstruktoren erstellten Objekte verwenden private Felder, wie zum Beispiel:Welche zwei Kategorien von JavaScript-Objekten gibt es?

Error: [[ErrorData]] Boolean: [[BooleanData]] Number: [[NumberData]] Date: [[DateValue]] RegExp: [[RegExpMatcher]] Symbol: [[SymbolData]] Map: [[MapData]]
Nach dem Login kopieren

Diese Felder führen dazu, dass die prototypische Vererbungsmethode nicht ordnungsgemäß funktioniert, sodass wir davon ausgehen können, dass alle diese nativen Objekte für bestimmte Funktionen oder Leistungen konzipiert sind.“ Privilegiertes Objekt ".

Verwenden Sie Objekte, um Funktionen und Konstruktoren zu simulieren: Funktionsobjekte und Konstruktorobjekte.

Ich habe die allgemeine Klassifizierung von Objekten bereits früher eingeführt. In JavaScript gibt es eine andere Perspektive für die Betrachtung von Objekten, nämlich die Verwendung von Objekten zur Simulation von Funktionen und Konstruktoren. Konstrukteur. Tatsächlich reserviert JavaScript einen privaten Feldmechanismus für diesen Objekttyp und legt die Konzepte abstrakter Funktionsobjekte und Konstruktorobjekte fest.

Die Definition eines Funktionsobjekts ist: ein Objekt mit [[call]] privaten Feldern, und die Definition eines Konstruktorobjekts ist: ein Objekt mit privaten Feldern [[construct]].

JavaScript nutzt den Entwurf von Objektsimulationsfunktionen, um Funktionen in allgemeinen Programmiersprachen zu ersetzen. Sie können aufgerufen werden und Parameter wie Funktionen in anderen Sprachen übergeben. Jeder Host, der „ein Objekt mit [[call]] privaten Feldern“ bereitstellt, kann von der JavaScript-Funktionsaufrufsyntax unterstützt werden.

Wir können sagen, dass jedes Objekt nur [[Aufruf]] implementieren muss, es ist ein Funktionsobjekt und kann als Funktion aufgerufen werden. Und wenn es [[construct]] implementiert, ist es ein Konstruktorobjekt und kann als Konstruktor aufgerufen werden.

Für Programmierer, die eine Ausführungsumgebung für JavaScript bereitstellen, können die oben erwähnten Hostobjekte und integrierten Objekte (z. B. Symbolfunktionen) Funktionen und Konstruktoren simulieren, solange die Felder den Anforderungen entsprechen.

Natürlich muss die vom Benutzer mit dem Funktionsschlüsselwort erstellte Funktion sowohl eine Funktion als auch ein Konstruktor sein. Die Verhaltenseffekte, die sie zeigen, sind jedoch nicht die gleichen.

Bei Host- und integrierten Objekten sind ihre Implementierungen von [[call]] (als Funktion aufgerufen) und [[construct]] (als Konstruktor aufgerufen) nicht immer konsistent.

对于用户使用 function 语法或者 Function 构造器创建的对象来说,[[call]]和[[construct]]行为总是相似的,它们执行同一段代码。我们看一下示例。

function f(){ return 1; } var v = f(); //把f作为函数调用 var o = new f(); //把f作为构造器调用
Nach dem Login kopieren

这样的规则造成了个有趣的现象,如果我们的构造器返回了一个新的对象,那么 new 创建的新对象就变成了一个构造函数之外完全无法访问的对象,这一定程度上可以实现“私有”。

function cls(){ this.a = 100; return { getValue:() => this.a } } var o = new cls; o.getValue(); //100 //a在外面永远无法访问到
Nach dem Login kopieren

特殊行为的对象

除了上面介绍的对象之外,在固有对象和原生对象中,有一些对象的行为跟正常对象有很大区别。

它们常见的下标运算(就是使用中括号或者点来做属性访问)或者设置原型跟普通对象不同,这里我简单总结一下。

  • Array:Array 的 length 属性根据最大的下标自动发生变化。

  • Object.prototype:作为所有正常对象的默认原型,不能再给它设置原型了。

  • String:为了支持下标运算,String 的正整数属性访问会去字符串里查找。

  • Arguments:arguments 的非负整数型下标属性跟对应的变量联动。

  • 模块的 namespace 对象:特殊的地方非常多,跟一般对象完全不一样,尽量只用于 import 吧。

  • 类型数组和数组缓冲区:跟内存块相关联,下标运算比较特殊。

  • bind 后的 function:跟原来的函数相关联。

【相关推荐:javascript视频教程

Das obige ist der detaillierte Inhalt vonWelche zwei Kategorien von JavaScript-Objekten gibt es?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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
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!