Dieser Artikel bietet Ihnen eine Einführung in die internen Eigenschaften von JavaScript-Funktionen (mit Beispielen). Ich hoffe, er wird Ihnen als Referenz dienen.
Es gibt zwei spezielle Objekte innerhalb der Funktion: this und arguments ist ein Array-ähnliches Objekt, das alle an die Funktion übergebenen Parameter enthält. Das arguments-Objekt verfügt außerdem über ein callee-Attribut, das einen Zeiger auf die Funktion darstellt, die das arguments-Objekt besitzt.
callee
function fact(num){ if(num<=1){ return 1; }else{ return num*fact(num-1); } }
Dies ist eine Funktion, die eine faktorielle Methode mithilfe einer rekursiven Methode implementiert. Ein Problem bei dieser Methode besteht darin, dass, wenn der Name der Tatsache geändert wird, die Funktion innerhalb der Funktion ist Wenn sich der Name in der Zeit nicht ändert, ist die Funktion ungültig. Zu diesem Zeitpunkt wird das aufgerufene Attribut verwendet, um die aktuelle Funktion durch ein num-Parameterobjekt zu ersetzen, was eine Tatsache ist.
Die aufgerufene Implementierung ist wie folgt
function fact(num){ if(num<=1){ return 1; }else{ return num*arguments.callee(num-1); } }
dies
dies Bezieht sich auf das Umgebungsobjekt der Funktionsausführung. Wenn eine Funktion als Methode eines Objekts aufgerufen wird, bezieht sich dieses Objekt zu diesem Zeitpunkt auf das Objekt, das die Funktion aktuell aufruft.
Verschiedene Umgebungen haben unterschiedliche Werte, auf die dadurch in verschiedenen Ausführungsumgebungen verwiesen wird.
Methodenaufruf
Wenn die Funktion ausgeführt wird Wird als Objektmethode verwendet, ist diese in der Funktion an das aktuelle Objekt gebunden (kann auch als Methodenaufruf bezeichnet werden)
Zum Beispiel:
var myNum = { value:1, increment:function(arg){ this.value +=arg; } }; myNum.increment(3); console.log('example1:'+myNum.value);//example1:4
Das obige Inkrement ist eine Objektmethode und this innerhalb der Objektmethode Zeigt auf das aktuelle Objekt
Funktionsaufruf
Wenn die Funktion als Nicht-Objektmethode verwendet wird, ist diese an das globale Objektfenster gebunden, wenn Sie aufrufen möchten Da es sich derzeit um eine interne Funktion handelt, können Sie that = this verwenden.
// 一般的函数 function add(a){ return a+2 ; } var value = 2; myNum.count = function (){ let value = 1; let help = function(){ this.value = add(this.value); } help(); console.log(this.value);//4 } myNum.count(); that = this方式 var value = 2; myNum.count = function (){ let value = 1; let that = this; let help = function(){ that.value = add(that.value); } help(); console.log(that.value);//3 } myNum.count();
Konstruktor
Wenn Sie den Konstruktor mit dem neuen Operator aufrufen, wird zunächst ein Prototyp (Prototypobjekt) erstellt, der mit dem Konstruktor verbunden ist, und dieser wird dann an das Objekt gebunden
function Person(name){ this.name = name; } Person.prototype.sayName = function(){ return this.name; } var person1 = new Person('TOM'); console.log(person1.sayName());
applycallbind
Bindet dies an das angegebene Umgebungsobjekt
var people = { name:"LILY" } console.log(Person.prototype.sayName.apply(people)); console.log(Person.prototype.sayName.bind(people)()); console.log(Person.prototype.sayName.call(people));
call: Die Methode ruft eine Funktion mit dem angegebenen Wert und der bereitgestellten Parameterliste auf.
Anwenden: Die Methode ruft eine Funktion mit dem angegebenen Wert und den bereitgestellten Parametern (Array oder arrayähnliches Objekt) auf.
bind: Die Methode erstellt eine neue Funktion und setzt beim Aufruf das Schlüsselwort this auf den bereitgestellten „Wert“.
ES6-Pfeilfunktion
Dies in der es6-Pfeilfunktion zeigt auf das Objekt, in dem es definiert ist, nicht auf das Ausführungsumgebungsobjekt, was bedeutet, dass dies ein unveränderter Wert ist, wenn es in der Pfeilfunktion verwendet wird
function foo(){ setTimeout(()=>{ console.log('name:',this.name); },1000) } var name = "kiki"; foo.call({name:"didi"});//name:didi
Der Wert von this in der Pfeilfunktion zeigt auf das Umgebungsobjekt, in dem er definiert wurde. Die Methode zur Implementierung der Pfeilfunktion in es5: Verwenden Sie den Mechanismus von that = this, um die Bindung von this zu realisieren
Oben Es handelt sich um ein Verständnis der internen Eigenschaften von Funktionen.Das obige ist der detaillierte Inhalt vonEinführung in die internen Eigenschaften von JavaScript-Funktionen (mit Beispielen). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!