Preco call rubrika: Programování: JavaScript

1 Data909
položil/-a 21.2.2014

Prečo v poslednej metode Basket.prototype._setEventStorage vola methodu notify pomocou call, nieje to iste this.notify() == this.notify.call(this) ? Podobne to je v najnovšej verzii s metodou notify.
www.zdrojak.cz/clanky/nakupni-kosik-pomoci-html5-web-storage/

odkaz
3 kbarborak
odpověděl/-a 22.2.2014

Mění tím kontext volání té metody na instanci "Basketu". Bez toho, by se použil kontext this z callbacku, a to je úplně jiný objekt. Volání this._listener() v metodě notify by skončilo chybou.

https://www.google.cz/search?q=addeventlistener+context
https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventLis...

Komentáře

  • matous.nemec : myFunc.call(this) ti přece nezmění context funkce, je to ekvivalent pro myFunc(this). Na to, aby se změnil context je potřeba použít myFunc.apply(this, [/*parameters_arr*/]) 22.3.2014
  • Komanc : matous.nemec: Myslim, ze je to trochu jinak. myFunc.call(context, arg1, arg2) i myFunc.apply(context, [arg1, arg2]) dela to same, rozdil je v tom, ze v metode call predavate volane funkci parametry jednotlive, kdezto s pouzitim apply je musite predat jako pole. V obou zminenych pripadech se zavola funkce myFunc(arg1, arg2) jen v jejim tele bude this ukazovat na context. (viz https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global...) 22.3.2014
  • matous.nemec : Ano, teď jsem to testoval a máte pravdu :) 22.3.2014

Pro plný přístup na Devel.cz se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.