Teilen von Fragen zum Grundwissen von JavaScript-Interviews
Laut StackOverflow-Umfrage ist JavaScript seit 2014 die beliebteste Programmiersprache. Das ist natürlich sinnvoll, schließlich erfordert 1/3 der Entwicklungsarbeit einige JavaScript-Kenntnisse. Wenn Sie Entwickler werden möchten, sollten Sie daher diese Sprache lernen.
Der Hauptzweck dieses Blogs besteht darin, gemeinsame Konzepte in allen Interviews zusammenzufassen, damit Sie sie schnell verstehen können. (Angesichts der Tatsache, dass dieser Artikel zu lang ist, um das Lesen zu erleichtern, wird er zur Übersetzung in drei Blogs unterteilt. Dies ist der dritte Teil. Klicken Sie für den ersten Teil bitte auf „Schnell die Grundlagen von JavaScript-Interviews beherrschen“ (1))
Empfohlene verwandte Artikel:Die umfassendste Sammlung von js-Interviewfragen im Jahr 2020 (aktuell)
neue Schlüsselwörter
Wenn Sie das Schlüsselwort new
verwenden, um eine Funktion auf ganz besondere Weise aufzurufen. Wir nennen die mit new
aufgerufenen Funktionen Konstruktorfunktionen.
Was genau macht die Funktion mit new
?
Erstellen Sie ein neues Objekt
Setzen Sie den Prototyp des Objekts auf den Prototyp des Konstruktors
Führen Sie das aus Konstruktor,
this
das neu erstellte Objekt ausführendas Objekt zurückgeben. Wenn der Konstruktor ein Objekt zurückgibt, wird das konstruierte Objekt zurückgegeben.
// 为了更好地理解底层,我们来定义new关键字 function myNew(constructor, ...arguments) { var obj = {} Object.setPrototypeOf(obj, constructor.prototype); return constructor.apply(obj, arguments) || obj }
Was ist der Unterschied zwischen der Verwendung von new
und der Nichtverwendung?
function Bird() { this.wings = 2; } /* 普通的函数调用 */ let fakeBird = Bird(); console.log(fakeBird); // undefined /* 使用new调用 */ let realBird= new Bird(); console.log(realBird) // { wings: 2 }
Um den Vergleich und das Verständnis zu erleichtern, hat der Übersetzer eine zusätzliche Testsituation hinzugefügt:
function MBird(){ this.wings =2; return "hello"; } let realMBrid = new MBird(); console.log(realMBird) // { wings: 2 }
Sie werden feststellen, dass dieser Satz return "hello"
keine Wirkung hat!
Prototyp und Vererbung
Prototyp ist das verwirrendste Konzept in JavaScript. Einer der Gründe dafür ist, dass prototype
in zwei verschiedenen Situationen verwendet werden kann.
Prototyp-Beziehung
Jedes Objekt hat einprototype
-Objekt, das alle Eigenschaften seines Prototyps enthält..__proto__
ist ein informeller Mechanismus (bereitgestellt in ES6), der verwendet wird, um den Prototyp eines Objekts zu erhalten. Sie können es verstehen, da es auf dasparent
des Objekts verweist.
Alle gewöhnlichen Objekte erben das Attribut.constructor
, das auf den Konstruktor des Objekts verweist. Wenn ein Objekt über einen Konstruktor implementiert wird, zeigt das__proto__
-Attribut auf das.prototype
des Konstruktors des Konstruktors.Object.getPrototypeOf()
ist eine Standardfunktion von ES5, die verwendet wird, um den Prototyp eines Objekts zu erhalten.Prototyp-Eigenschaften
Jede Funktion verfügt über eine.prototype
-Eigenschaft, die alle Eigenschaften enthält, die vererbt werden können. Standardmäßig enthält dieses Objekt ein.constructor
-Attribut, das auf den ursprünglichen Konstruktor verweist. Jedes mit einem Konstruktor erstellte Objekt verfügt über eine Konstruktoreigenschaft.
Das Folgende ist ein Beispiel zum besseren Verständnis:
function Dog(breed, name){ this.breed = breed, this.name = name } Dog.prototype.describe = function() { console.log(`${this.name} is a ${this.breed}`) } const rusty = new Dog('Beagle', 'Rusty'); /* .prototype 属性包含了构造函数以及构造函数中在prototype上定义的属性。*/ console.log(Dog.prototype) // { describe: ƒ , constructor: ƒ } /* 使用Dog构造函数构造的对象 */ console.log(rusty) // { breed: "Beagle", name: "Rusty" } /* 从构造函数的原型中继承下来的属性或函数 */ console.log(rusty.describe()) // "Rusty is a Beagle" /* .__proto__ 属性指向构造函数的.prototype属性 */ console.log(rusty.__proto__) // { describe: ƒ , constructor: ƒ } /* .constructor 属性指向构造函数 */ console.log(rusty.constructor) // ƒ Dog(breed, name) { ... }
Der Einsatz von JavaScript kann als recht flexibel bezeichnet werden, um Fehler zu vermeiden , können Sie auch Enter Fundebug für die Online-Echtzeitüberwachung akzeptieren.
Prototypenkette
Prototypenkette bezieht sich auf Objekte, die durch Prototypen zu einer gerichteten Kette verbunden sind. Beim Zugriff auf eine Eigenschaft eines Objekts prüft die JavaScript-Engine zunächst, ob das Objekt die Eigenschaft enthält. Wenn nicht, prüfen Sie, ob es im Prototyp des Objekts enthalten ist. Und so weiter, bis die Immobilie gefunden ist oder das letzte Objekt gefunden ist. Der Prototyp des letzten Objekts ist standardmäßig null.
Besitzen vs. Vererben
Ein Objekt verfügt über zwei Arten von Eigenschaften, nämlich seine eigenen definierten und geerbten Eigenschaften.
function Car() { } Car.prototype.wheels = 4; Car.prototype.airbags = 1; var myCar = new Car(); myCar.color = 'black'; /* 原型链中的属性也可以通过in来查看: */ console.log('airbags' in myCar) // true console.log(myCar.wheels) // 4 console.log(myCar.year) // undefined /* 通过hasOwnProperty来查看是否拥有该属性: */ console.log(myCar.hasOwnProperty('airbags')) // false — Inherited console.log(myCar.hasOwnProperty('color')) // true
Object.create(obj)
erstellt ein neues Objekt, dessen Prototyp auf obj
zeigt.
var dog = { legs: 4 }; var myDog = Object.create(dog); console.log(myDog.hasOwnProperty('legs')) // false console.log(myDog.legs) // 4 console.log(myDog.__proto__ === dog) // true
Vererbung wird per Referenz übergeben
Geerbte Eigenschaften werden alle per Referenz übergeben. Lassen Sie es uns anhand von Beispielen anschaulich verstehen:
var objProt = { text: 'original' }; var objAttachedToProt = Object.create(objProt); console.log(objAttachedToProt.text) // original // 我们更改objProt的text属性,objAttachedToProt的text属性同样更改了 objProt.text = 'prototype property changed'; console.log(objAttachedToProt.text) // prototype property changed // 但是如果我们讲一个新的对象赋值给objProt,那么objAttachedToProt的text属性不受影响 objProt = { text: 'replacing property' }; console.log(objAttachedToProt.text) // prototype property changed
Klassische Vererbung vs. prototypische Vererbung
Eric Elliotts Artikel enthält eine sehr detaillierte Einführung: Master the JavaScript Interview: Was ist der Unterschied zwischen Klassen- und prototypischer Vererbung? ?
Der Autor glaubt, dass die prototypische Vererbung der klassischen Vererbung überlegen ist, und bietet eine Videoeinführung: https://www.youtube.com/watch...
Asynchrones JavaScript
JavaScript ist eine Single-Threaded-Programmiersprache, was bedeutet, dass die JavaScript-Engine jeweils nur einen bestimmten Codeabschnitt ausführen kann. Das dadurch verursachte Problem ist: Wenn die Ausführung eines Codeabschnitts lange dauert, bleiben andere Vorgänge hängen. JavaScript verwendet Call Stack, um Funktionsaufrufe aufzuzeichnen. Ein Call Stack kann als Stapel Bücher betrachtet werden. Das letzte Buch wird oben aufgelegt und zuerst entnommen. Die zuerst abgelegten Bücher liegen unten und werden zuletzt entnommen.
Um zu verhindern, dass komplexer Code die CPU zu lange belegt, besteht eine Lösung darin, eine asynchrone Callback-Funktion zu definieren. Definieren wir selbst eine asynchrone Funktion:
function greetingAsync(name, callback){ let greeting = "hello, " + name ; setTimeout(_ => callback(greeting),0); } greetingAsync("fundebug", console.log); console.log("start greeting");
我们在greetingAsync
中构造了greeting
语句,然后通过setTimeout
定义了异步,callback
函数,是为了让用户自己去定义greeting的具体方式。为方便起见,我们时候直接使用console.log
。
上面代码执行首先会打印start greeting
,然后才是hello, fundebug
。也就是说,greetingAsync
的回调函数后执行。在网站开发中,和服务器交互的时候需要不断地发送各种请求,而一个页面可能有几十个请求。如果我们一个一个按照顺序来请求并等待结果,串行的执行会使得网页加载很慢。通过异步的方式,我们可以先发请求,然后在回调中处理请求结果,高效低并发处理。
下面通过一个例子来描述整个执行过程:
const first = function () { console.log('First message') } const second = function () { console.log('Second message') } const third = function() { console.log('Third message') } first(); setTimeout(second, 0); third(); // 输出: // First message // Third message // Second message
初始状态下,浏览器控制台没有输出,并且事件管理器(Event Manager)是空的;
first()
被添加到调用栈将
console.log("First message")
加到调用栈console.log("First message")
执行并输出“First message”到控制台console.log("First message")
从调用栈中移除first()
从调用栈中移除setTimeout(second, 0)
加到调用栈setTimeout(second, 0)
执行,0ms之后,second()
被加到回调队列setTimeout(second, 0)
从调用栈中移除third()
加到调用栈console.log("Third message")
加到调用栈console.log("Third message")
执行并输出“Third message”到控制台console.log("Third message")
从调用栈中移除third()
从调用栈中移除Event Loop 将
second()
从回调队列移到调用栈console.log("Second message")
加到调用栈console.log("Second message")
Second message”到控制台console.log("Second message")
从调用栈中移除Second()
从调用栈中移除
特别注意的是:second()
函数在0ms之后并没有立即执行,你传入到setTimeout()
函数的时间和second()
延迟执行的时间并不一定直接相关。事件管理器等到setTimeout()
设置的时间到期才会将其加入回调队列,而回调队列中它执行的时间和它在队列中的位置已经它前面的函数的执行时间有关。
相关学习推荐:javascript视频教程
Das obige ist der detaillierte Inhalt vonTeilen von Fragen zum Grundwissen von JavaScript-Interviews. 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

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

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

Was ist JPA? Wie unterscheidet es sich von JDBC? JPA (JavaPersistence API) ist eine Standardschnittstelle für objektrelationales Mapping (ORM), die es Java-Entwicklern ermöglicht, vertraute Java-Objekte zum Betreiben von Datenbanken zu verwenden, ohne SQL-Abfragen direkt in die Datenbank schreiben zu müssen. JDBC (JavaDatabaseConnectivity) ist die Standard-API von Java für die Verbindung mit Datenbanken. Sie erfordert, dass Entwickler SQL-Anweisungen verwenden, um die Datenbank zu betreiben. JPA kapselt JDBC, bietet eine bequemere und übergeordnete API für die objektrelationale Zuordnung und vereinfacht Datenzugriffsvorgänge. Was ist in JPA eine Entität? juristische Person

Einführung in die Methode zum Abrufen des HTTP-Statuscodes in JavaScript: Bei der Front-End-Entwicklung müssen wir uns häufig mit der Interaktion mit der Back-End-Schnittstelle befassen, und der HTTP-Statuscode ist ein sehr wichtiger Teil davon. Das Verstehen und Abrufen von HTTP-Statuscodes hilft uns, die von der Schnittstelle zurückgegebenen Daten besser zu verarbeiten. In diesem Artikel wird erläutert, wie Sie mithilfe von JavaScript HTTP-Statuscodes erhalten, und es werden spezifische Codebeispiele bereitgestellt. 1. Was ist ein HTTP-Statuscode? HTTP-Statuscode bedeutet, dass der Dienst den Dienst anfordert, wenn er eine Anfrage an den Server initiiert
