Dies ist ein Schlüsselwort in JavaScript. Der Wert ändert sich, wenn die Funktion in verschiedenen Situationen verwendet wird. Aber es gibt immer ein Prinzip, das heißt, es bezieht sich auf das Objekt, das die Funktion aufruft.
Dies verweist im Allgemeinen auf den aktuellen Angerufenen, kann aber auch auf andere Weise geändert werden. Im Folgenden werden drei Methoden vorgestellt:
1. Bei Verwendung als Vererbung:
function Parent(age){ this.name=['mike','jack','smith']; this.age=age; } function Child(age){ Parent.call(this,age);//把this指向Parent,同时还可以传递参数 } var test=new Child(21); console.log(test.age);//21 console.log(test.name); test.name.push('bill'); console.log(test.name);//mike,jack,smith,bill
2. Sowohl call als auch apply können dies ändern, um auf zu verweisen, aber der zweite Parameter von apply ist eine Hash-Verteilung und call kann ein Array
seinconsole.log(Math.max.apply(null,[1,2,3,4]));//4
apply()-Methode empfängt zwei Parameter: einer ist der Bereich, in dem die Funktion ausgeführt werden soll, und der andere ist das Parameterarray. Unter diesen kann der zweite Parameter eine Instanz von Array oder ein Argumentobjekt sein. Die Methode call() hat die gleiche Wirkung wie die Methode apply(), sie unterscheiden sich nur in der Art und Weise, wie sie Parameter empfangen. Für call()
Was Methoden betrifft, ändert sich der Wert dieses ersten Parameters nicht. Was sich ändert, ist, dass die übrigen Parameter direkt an die Funktion übergeben werden. Mit anderen Worten: Bei Verwendung der Methode call() müssen die an die Funktion übergebenen Parameter einzeln aufgelistet werden.
3.ES5 definiert auch eine Methode : bind(), die eine Instanz einer Funktion erstellt und deren Wert an den Funktionswert bind() gebunden wird . Wie zum Beispiel
window.color='red'; var o={color:'blue'}; function sayColor(){ console.log(this.color); } var objectSaycolor=sayColor.bind(o); //var objectSaycolor=sayColor.bind(); objectSaycolor();//blue
Hier ruft sayColor() bind() auf und übergibt das Objekt o, wodurch die Funktion objectSayColor() erstellt wird. Der Wert this der Funktion objectSayColor() ist gleich o. Selbst wenn diese Funktion im globalen Bereich aufgerufen wird, wird also Blau angezeigt.
Das Obige ist die Methode, die Ihnen der Herausgeber vorstellt, um diesen Zeiger in JS zu ändern (Aufruf, Anwenden, Binden).
Ich habe noch etwas Zeit, um Ihnen einige Grundkenntnisse beizubringen: den Unterschied zwischen call() und apply()
1. Definition der Methode
Aufrufmethode:
Syntax: call(thisObj, Object)
Definition: Rufen Sie eine Methode eines Objekts auf, um das aktuelle Objekt durch ein anderes Objekt zu ersetzen.
Anleitung:
Mit der Aufrufmethode kann eine Methode im Namen eines anderen Objekts aufgerufen werden. Die Aufrufmethode ändert den Objektkontext einer Funktion vom Anfangskontext in das durch thisObj angegebene neue Objekt.
Wenn kein thisObj-Parameter angegeben wird, wird das globale Objekt als thisObj verwendet.
Methode anwenden:
Syntax: apply(thisObj, [argArray])
Definition: Wenden Sie eine Methode eines Objekts an, um das aktuelle Objekt durch ein anderes Objekt zu ersetzen.
Beschreibung:
Wenn argArray kein gültiges Array oder kein Argumentobjekt ist, wird ein TypeError verursacht.
Wenn weder argArray noch thisObj bereitgestellt werden, wird das globale Objekt als thisObj verwendet und es können keine Parameter übergeben werden.
Codebeispiel:
function Animal(name) { this.name = name; this.showName = function() { console.log(this.name); }; } function Cat(name) { Animal.call(this, name); } Cat.prototype = new Animal(); function Dog(name) { Animal.apply(this, name); } Dog.prototype = new Animal(); var cat = new Cat("Black Cat"); //call必须是object var dog = new Dog(["Black Dog"]); //apply必须是array cat.showName(); dog.showName(); console.log(cat instanceof Animal); console.log(dog instanceof Animal);
Anruf simulieren, diesen Ersatz anwenden
function Animal(name) { this.name = name; this.showName = function() { alert(this.name); }; }; function Cat(name) { this.superClass = Animal; this.superClass(name); delete superClass; } var cat = new Cat("Black Cat"); cat.showName();