Natknąłem jakiś kod, który ma tego rodzaju wzór w wielu miejscach:Jaki jest cel this.someFunction.call (this, param);
this.someFunction.call(this, param);
ale wydaje mi się po prostu bardziej rozwlekły sposób wpisywać
this.someFunction(param)
Wzór czasami pojawia się wewnątrz funkcja dostarczana jako wywołanie zwrotne. Zdarza się używać Backbone, jeśli jest to istotne. Coś takiego:
Backbone.View.extend({
// other stuff ...
someFunction: function(param) {
// ...
},
anotherFunction: function() {
this.collection.on("some_event", function() {
this.someFunction.call(this, param);
});
}
});
Czy wzór faktycznie mają wpływ, który nie jest odpowiednikiem this.someFunction(param)
albo ktoś po prostu nerwowy o zamknięcie nie przechwytywanie poprawne this
?
Dzięki za wszelkie spostrzeżenia!
* "czy ktoś był po prostu zdenerwowany tym zamknięciem, nie przechwytując poprawnego" tego "" * "to" jest specjalną wartością w funkcjach i nie ma na nią wpływu zasięg. (wyjątek: funkcje strzałki ES6). Nie widzę powodu, aby preferować '.call' ponad normalne wywołanie funkcji. –
Obie są równoważne prawdopodobnie pewnej konwencji kodowania. Skrypty są również często maskowane. – kidwon
Zauważ, że użycie funkcji call() dodaje trochę narzutów i spowalnia wykonywanie, co jest szczególnie widoczne w pętlach. kod mógłby być zapisany jako 'this.collection.on (" some_event ", this.someFunction.bind (this, param));' który blokuje _to przed czasem, który może być szybszy niż call(). chociaż, w zależności od tego, w jaki sposób szkielet korzysta z _this_, możesz potrzebować duplikować związaną wartość inFunctionFunction(), aby mieć odpowiednią wartość _ w tym czasie. – dandavis