Heim >Web-Frontend >js-Tutorial >Einführung in die internen Eigenschaften von JavaScript-Funktionen (mit Beispielen)

Einführung in die internen Eigenschaften von JavaScript-Funktionen (mit Beispielen)

不言
不言nach vorne
2019-03-18 11:38:392009Durchsuche

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(&#39;example1:&#39;+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(&#39;TOM&#39;);

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen