OK. Mamy trzy razy Function.prototype.bind
funkcji tutaj, którego (uproszczony) Kod
function bind(context) {
var fn = this;
return function() {
return fn.apply(context, arguments);
}
}
będę skracać w bardziej funkcjonalnym stylu z dużą ilością częściowego zastosowania: wiążą fn (kontekstu) -> fn kontekst.
Co więc robi? Masz bind.call(bind, bind)
lub powiązać bind (bind). Rozwińmy to, aby związać bind. Co by było, gdybyśmy przekazali mu jakieś argumenty?
wiążą wiążą (wiązania) (FN) (kontekst)
wiążą wiążą(FN) (kontekst)
wiążą fn(kontekście)
FN kontekstowego
Tu jesteśmy. Możemy przypisać to do niektórych zmiennych, aby wynik wyraźniej:
bindbind = wiążą wiążą (powiązań)
bindfn = bindbind coś (fn) //
wiążą fn
contextbindfn = bindfn coś (kontekstu) //
fn kontekst
wynik = contextbindfn coś (arg) //
fn kontekst (argumenty)
"kontekst" będzie lepiej jako "thisValue" lub podobne. – RobG
@RobG: Co jest nie tak z "* kontekstem"? Często go używam i uważam, że jest bardziej opisowy niż termin techniczny. Czy masz link do mnie (nas) do przeczytania? – Bergi
W ECMAScript, "kontekst" jest używany w odniesieniu do [kontekst wykonania] (http://ecma-international.org/ecma-262/5.1/# sec-10), który zawiera wszystkie parametry i zakres aktualnie wykonywanego kodu. Zawiera wartość 'this' i jest kontrolowana przez sposób zapisywania kodu. Jest statyczny. Natomiast funkcja "this" jest dynamiczna i kompletnie określona przez funkcję, nie ma nic wspólnego z tym, jak funkcja jest zadeklarowana lub zainicjowana. Dlatego nazwanie tego "kontekstu" jest niewłaściwe. Ci, którzy to robią, muszą przeczytać i zrozumieć specyfikację języka, z którego korzystają. – RobG