Jaki jest najczęstszy sposób na zachowanie kontekstu this
? Co jest szybsze? Co wolisz?
$ .proxy (...)
$('a').on('click', $.proxy(function() { this.close(); }, this));
var własnym
var self = this; $('a').on('click', function() { self.close(); });
Jaki jest najczęstszy sposób na zachowanie kontekstu this
? Co jest szybsze? Co wolisz?
$ .proxy (...)
$('a').on('click', $.proxy(function() {
this.close();
}, this));
var własnym
var self = this;
$('a').on('click', function() {
self.close();
});
Zacznijmy od ustalenia kodu. Masz niepotrzebny deklaracja funkcji, można użyć $.proxy
jak
$('a').on('click', $.proxy(this.close, this));
Teraz drugiego rozwiązania opartego na self
self
zmiennaTo pewnie dlatego jest bardziej używany.
Należy pamiętać, że jeśli nie muszą być zgodne z IE8, można użyć bind:
$('a').on('click', this.close.bind(this));
Wybierz pierwszy. nie wymaga dodatkowej zmiennej.
Obie są wspólne.
Prędkość w tym przypadku nie ma znaczenia. Użytkownik nie zauważy, czy wywołanie zwrotne dla kliknięcia rozpoczyna się po 0,01 ms. lub 0,1 ms.
W rzadkich przypadkach, w których ma to znaczenie, oczekuję, że metoda zmiennej będzie nieco szybsza, ale trzeba by ją porównać.
Moje osobiste preferencje różnią się w zależności od tego, gdzie są używane i od tego, jaki jest kod wewnątrz wywołania zwrotnego. Jedną z zalet metody zmiennej jest to, że działa ona dla zagnieżdżonych wywołań zwrotnych bez konieczności ponownego jej stosowania na każdym poziomie.
Istnieje jeszcze jeden powód wyboru bardziej wydajnego sposobu niż tylko czas reakcji: jeśli akcje zaczynają się od 0,1 ms 0,01 ms po kliknięciu, co oznacza, że ma 0.Jeszcze o 09 ms wykonanie JS, które na smartfonie powoduje bezpośrednio więcej utraty baterii dla tego samego działania. Oczywiście, że to praktycznie nic, ale gromadzi się szybko. Ponadto, dla porównania: od 0,1 do 0,01 nadal jest to 1000% poprawa;). – Simon
@Simon: Jesteś mikro optymalizacją. Jeśli chcesz zoptymalizować, na pewno w kodzie są inne rzeczy, w których możesz zaoszczędzić znacznie więcej czasu na wykonanie. – Guffa
To prawda, ale chodzi o zasadę wyboru bardziej wydajnego sposobu w ogóle, a nie o faktyczne oszczędzanie czasu, które można uzyskać w tym przykładzie. – Simon
Preferuję '$ .proxy()' –
Moja osobista statystyka utrzymuje się na poziomie około pięćdziesięciu pięćdziesięciu. Z całą powagą: wybierz jedną i trzymaj się jej. FYI, '$ .proxy' jest tym samym, co natywna metoda" .indeksowania "funkcji. –
Szybciej jak? Jeśli chodzi o wykonanie, musisz go [porównać] (http://jsperf.com). Co wolałbym? Poszedłbym z drugą opcją, ponieważ jest dla mnie po prostu bardziej czytelna. –