Dieses Arbeitsprinzip
Wenn eine Funktion als Objektmethode aufgerufen wird, wird dieses Objekt zugewiesen.
Kopieren Sie den Code -Code wie folgt:
var parent = {
Methode: function () {
console.log (this);
}
};
Elternschaft.Method ();
// <-parent
Beachten Sie, dass dieses Verhalten sehr "zerbrechlich" ist. Dies verwirrt die meisten Entwickler.
Kopieren Sie den Code -Code wie folgt:
Thiscrowncar ();
// <-Window
Ändern Sie dies
Die. CALL-, .Apply- und .bind -Methoden wurden verwendet, um die Methode zum Aufrufen von Funktionen zu bedienen, um uns zu helfen, die Werte dieser und die an die Funktion übergebenen Parameterwerte zu definieren.
Funktion.Prototype.Call kann eine beliebige Anzahl von Parametern haben.
Kopieren Sie den Code -Code wie folgt:
Array.Prototype.slice.call ([1, 2, 3], 1, 2)
// <- [2]
Funktion.Prototype.Apply ähnelt .Call, aber die Parameter, die sie an die Funktion übergeben hat, ist ein Array, kein Parameter.
String.prototype.split.apply('13.12.02', ['.'])
// <- ['13', '12', '02']
Function.Prototype.bind erstellt eine spezielle Funktion, die immer Parameter verwendet, die an .bind als Wert übergeben werden kann, der an .bind übergeben werden kann, und die Curride -Version, die einen Teil der Parameter zuweisen und die ursprüngliche Funktion erstellen kann.
Kopieren Sie den Code -Code wie folgt:
var arr = [1, 2];
var add = array.prototype.push.bind (arr, 3);
// effektiv das gleiche wie arr.push (3)
hinzufügen ();
// effektiv das gleiche wie arr.push (3, 4)
hinzufügen (4);
console.log (arr);
// <- [1, 2, 3, 3, 4]
Dies in der Domänenkette
Im folgenden Beispiel kann dies in der Domänenkette nicht unverändert bleiben. Dies ist der Defekt der Regeln, und es bringt Amateurentwickler oft Verwirrung.
Kopieren Sie den Code -Code wie folgt:
Funktion Scoping () {
console.log (this);
Return function () {
console.log (this);
};
}
Scoping () ();
// <-Window
// <-Window
Es gibt eine gemeinsame Methode, um eine lokale Variable zu erstellen, um einen Verweis darauf zu erhalten, und es darf keine Lebensvariablen in der Sub -Action -Domäne geben. Die gleichnamigen Variablen im sub -scope behandeln die Verweise darauf in der übergeordneten Punktzahl. http://www.cnblogs.com/sosoft/
Kopieren Sie den Code -Code wie folgt:
Funktion resting () {
var seelf = this;
Return function () {
console.log (self);
};
}
Stützen () ();
// <-Window
Es sei denn, Sie möchten das dieser des übergeordneten Umfangs gleichzeitig und den aktuellen Wert dieser Wert aus einigen unerklärlichen Gründen verwenden, verwenden ich es vor, die Methode .bindfunktion zu verwenden. Dies kann verwendet werden, um den übergeordneten Bereich anzugeben, um das Sub -Scope zu bezeichnen.
Kopieren Sie den Code -Code wie folgt:
Funktion up () {) {)
Return function () {
console.log (this);
} .Bind (this);
}
brechen () ();
// <-Window