Heim Web-Frontend js-Tutorial Eine kurze Diskussion über die Verwendung von call(), apply() und bind() in Javascript_Javascript-Kenntnissen

Eine kurze Diskussion über die Verwendung von call(), apply() und bind() in Javascript_Javascript-Kenntnissen

May 16, 2016 pm 03:14 PM
javascript

Funktionen in JavaScript sind nicht nur eine Sprachfunktion ähnlich den Methoden in Java, sie können auch als Objekte existieren. In diesem Artikel werden einige spezielle Verwendungsmöglichkeiten von Funktionen in JavaScript untersucht, einschließlich der drei Prototypmethoden call, apply und bind.
1. Funktionsgrundlagen
Eine Funktion in JavaScript ist eine Sprachfunktion, die einer Methode in Java ähnelt, aber unabhängig von einer Klasse definiert werden kann.

Funktionale Programmierung: Da JavaScript anonyme Funktionen unterstützt, können Funktionen als Objekte verwendet werden. Daher unterstützt JavaScript nicht nur die prozedurale Programmierung (objektorientiert ist auch eine Art prozedurale Programmierung), sondern auch die funktionale Programmierung.
Kontext

Jeder Aufruf einer Funktion hat einen besonderen Wert – den Kontext dieses Aufrufs – das ist der Wert des Schlüsselworts this. Wenn eine Funktion als Eigenschaft des Objekts in ein Objekt eingebunden wird, wird sie als Methode des Objekts bezeichnet. Wenn eine Funktion über dieses Objekt aufgerufen wird, stellt das Objekt den Kontext des Aufrufs dar, der den Wert dieser Funktion darstellt.

Es ist zu beachten, dass es sich hierbei um ein Schlüsselwort und nicht um eine Variable oder einen Attributnamen handelt. Die JavaScript-Syntax erlaubt es nicht, diesem Wert einen Wert zuzuweisen.

Eine Funktion ist eine Art Objekt

Der größte Unterschied zwischen Funktionen in JavaScript und Methoden in Java oder Funktionen in der Sprache C besteht darin, dass Funktionen in JavaScript auch Objekte sind. Dies bedeutet jedoch nicht, dass alle Objekte Funktionen sind. Eine Funktion ist ein spezielles Objekt, das ausführbaren Code enthält und von anderem Code aufgerufen werden kann.

Im Gegensatz zu Variablen unterliegt das Schlüsselwort this keinen Bereichsbeschränkungen und verschachtelte Funktionen erben dies nicht von der Funktion, die es aufruft. – Wenn eine verschachtelte Funktion als Methode aufgerufen wird, zeigt ihr Wert auf das Objekt, das sie aufgerufen hat. - Wenn die verschachtelte Funktion als Funktion aufgerufen wird, ist der Wert dieser entweder das globale Objekt (im nicht-strikten Modus) oder undefiniert (im strikten Modus).

Viele Leute glauben fälschlicherweise, dass beim Aufruf einer verschachtelten Funktion diese auf den Kontext der äußeren Funktion verweist. Wenn Sie auf den Wert dieser externen Funktion zugreifen möchten, müssen Sie den Wert dieser Funktion in einer Variablen speichern. Diese Variable und die interne Funktion befinden sich beide im selben Bereich. Zum Beispiel:

var o = {
 m: function() {
  var self = this;
  console.log(this==o); // true
  f();
  
  function f() {
   console.log(this === o); // false,this的值是全局对象或undefined
   console.log(self === o); // true
  }
 }
}
Nach dem Login kopieren

Schließung

JavaScript-Funktionen können in anderen Funktionen verschachtelt definiert werden, sodass sie auf alle Variablen in dem Bereich zugreifen können, in dem sie definiert sind. Dies bedeutet, dass JavaScript-Funktionen einen Abschluss bilden, was JavaScript sehr leistungsstarke Programmierfunktionen verleiht.

als Funktion des Wertes
In JavaScript ist eine Funktion nicht nur eine Syntax, sondern auch ein Wert. Das heißt, eine Funktion kann einer Variablen zugewiesen, in den Eigenschaften eines Objekts oder eines Elements eines Arrays gespeichert und an ein anderes übergeben werden Funktion als Parameter usw.

binden, anrufen, bewerben
Jede Funktion enthält ein Prototypattribut, das einen Verweis auf ein Objekt darstellt. Dieses Objekt wird als „Prototypobjekt“ bezeichnet. Jede Funktion enthält ein anderes Prototypobjekt. Bei Verwendung einer Funktion als Konstruktor erbt das neu erstellte Objekt Eigenschaften vom Prototypobjekt.

Function.prototype.call() und Function.prototype.apply()

call() und apply() können als Methoden eines Objekts betrachtet werden, und Funktionen werden indirekt durch Aufrufen von Methoden aufgerufen. Ihr erster Parameter ist das übergeordnete Objekt der aufzurufenden Funktion, das den aufrufenden Kontext darstellt, und über dieses wird im Funktionskörper eine Referenz darauf abgerufen. Die Methode apply() hat die gleiche Wirkung wie die Methode call(), außer dass die Methode der Funktionsübertragung unterschiedlich ist. Ihre tatsächlichen Parameter werden alle in einem Array platziert.

Um beispielsweise die Funktion f() als Methode des Objekts o aufzurufen und zwei Parameter zu übergeben, können Sie Code wie diesen verwenden:

var o = {};

function f(a, b) {
 return a + b;
}

f.call(o, 1, 2);    // 将函数f作为o的方法,实际上就是重新设置函数f的上下文
f.apply(o, [1, 2]);
Nach dem Login kopieren

Geben Sie ein weiteres Beispiel: Verwenden Sie die Call-Methode, um eine anonyme Funktion aufzurufen:

Im for-Schleifenkörper des folgenden Beispiels erstellen wir eine anonyme Funktion und führen dann die anonyme Funktion aus, indem wir die Aufrufmethode der Funktion aufrufen und dabei jedes Array-Element als angegebenen Wert verwenden. Der Hauptzweck dieser anonymen Funktion besteht darin, jedem Array-Elementobjekt eine Druckmethode hinzuzufügen. Diese Druckmethode kann die korrekte Indexnummer jedes Elements im Array ausdrucken. Natürlich ist es nicht notwendig, die Array-Elemente als Wert an die anonyme Funktion zu übergeben (normale Parameter reichen aus). Der Zweck besteht darin, die Verwendung von Aufrufen zu demonstrieren.

var animals = [
 {species: 'Lion', name: 'King'},
 {species: 'Whale', name: 'Fail'}
];

for (var i = 0; i < animals.length; i++) {
 (function (i) { 
  this.print = function () { 
   console.log('#' + i + ' ' + this.species + ': ' + this.name); 
  } 
  this.print();
 }).call(animals[i], i);
}

Nach dem Login kopieren

Function.prototype.bind()

bind() ist eine neue Methode in ES5. Wie aus dem Namen hervorgeht, besteht die Hauptfunktion dieser Methode darin, eine Funktion an ein Objekt zu binden. Wenn die bind()-Methode für die Funktion f() aufgerufen wird und dann ein Objekt o als Parameter übergeben wird, gibt diese Methode eine neue Funktion zurück: (in Form eines Funktionsaufrufs) Der Aufruf der neuen Funktion ersetzt das Original Funktion f() Wird als Methode von o aufgerufen. Zum Beispiel:

function f(y) {
 return this.x + y;
}

var o = {
 x: 1
};

var g = f.bind(o); // 通过调用 g(x) 来调用 o.f(x)
g(2); // 3

Nach dem Login kopieren

Tatsächlich können wir die bind()-Methode problemlos implementieren:

// 返回一个函数,通过调用它来调用o中的方法f(),传递它所有的实参
function bind(f, o) {
 if (f.bind) return f.bind(o); // 如果bind()方法存在,使用bind()方法
 else return function () {
  return f.apply(o, arguments);
 }
}

Nach dem Login kopieren

二、函数式编程
JavaScript并非函数式编程语言,但在JavaScript中可以像操控对象一样操控函数,也就是说可以在JavaScript中应用函数式编程技术。

使用函数处理数组

假设有一个数组,数组元素都是数字,我们想要计算这些元素的平均值和标准差。

var data = [1, 1, 3, 5, 5];
var sum = function(x, y) {
 return x + y;
};
var square = function(x) {
 return x * x;
};

var mean = data.reduce(sum)/data.length;
var deviations = data.map(x => x - mean);

Nach dem Login kopieren

var stddev = Math.sqrt(deviations.map(square).reduce(sum)/(data.length - 1));
高阶函数

高阶函数就是操作函数的函数,它接收一个或多个函数作为参数,并返回一个新函数。举个例子:

function not(f) {
 return function () {
  var result = f.apply(this, arguments);
  return !result;
 };
}

// 判断x是否为偶数的函数
var even = function(x) {
 return x % 2 === 0;
};

var odd = not(even);      // 一个新函数,所做的事情和even()相反
[1, 1, 3, 5, 5].every(odd);   // true,每个函数都是奇数

Nach dem Login kopieren

函数not()是个高阶函数,因为它返回一个新的函数,这个新函数将它的实参传入f(),并返回f的返回值的逻辑非。

以上就是关于javascript的call()、apply()、bind()的用法,希望对大家的学习有所帮助。

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

Video Face Swap

Video Face Swap

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

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