Yehuda Katz ma a good writeup metody JavaScript Function#call
. Jego zapis powinien odpowiedzieć na twoje pytanie i wiele innych pytań uzupełniających.
Podczas wywołania funkcji bezpośrednio, stosując ogólną składnię:
var foo = function() {
console.log("foo");
return this;
};
foo(); // evaluates to `window`
Następnie this
wewnątrz wywołania funkcji jest cokolwiek this
jest poza wywołania funkcji. Domyślnie w przeglądarcepoza wszelkimi wywołaniami funkcji jest window
. Wewnątrz funkcji wywołanie jak wyżej, this
jest również domyślnie window
.
Podczas wywołania funkcji przy użyciu składni metoda-Call:
var bar = {
foo: function() {
console.log("foo");
return this;
}
};
bar.foo(); // evaluates to `bar`
Następnie this
wewnątrz wywołania funkcji jest obiekt w lewo okresu skrajnej prawej: w tym przypadku, bar
.
Możemy zasymulować tę sytuację za pomocą call
.
Po skonfigurowaniu funkcji na zewnątrz obiektu i chcesz się połączyć je z this
wewnątrz wywołania funkcji ustawiony na obiekcie, można:
var foo = function() {
console.log("foo");
return this;
}
var bar = { };
foo.call(bar); // evaluates to `bar`
Możesz użyć tej techniki do przekazywania argumentów, a także:
var foo = function(arg1, arg2) {
console.log("foo");
return arg1 + arg2;
}
var bar = { };
foo.call(bar, "abc", "xyz"); // evaluates to `"abcxyz"`
[Zaproszenie do dokumentacji MDN()] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call) – epascarello