OOP Callback, this?
Sziasztok,
röviden nem tudnám leírni a JavaScript problémámat, bár biztosan van rá valami szakkifejezés, tehát inkább kifejtem:
Kreáltam egy objektumot imigyen:Az objektum saját magában további objektumot hoz létre, így:A Server objektum eseménykezelőjébe beillesztek egy bindet:A gond ott van, hogy a this.someCallback scope-ja ezután nem a myObject lesz, hanem a Server, amiből nem tudom hogyan kellene kitörnöm (ugye a this.myVar a Server objektumban nincs benne, error).
A kérdés: milyen módszerrel szokás az ilyen helyzeteket megoldani? Van rá valami nyelvi eszköz?
#nodejs
■ röviden nem tudnám leírni a JavaScript problémámat, bár biztosan van rá valami szakkifejezés, tehát inkább kifejtem:
Kreáltam egy objektumot imigyen:
- function myObject(options) {
- this.myVar = 1;
- this.someCallback = function (string) {
- console.log(string + '/' + this.myVar);
- }
- }
- ...
- this.server = new Server();
- ...
- ...
- this.server.on('message', this.someCallback);
- ...
A kérdés: milyen módszerrel szokás az ilyen helyzeteket megoldani? Van rá valami nyelvi eszköz?
#nodejs
proxy
bind
metódusa, illetve amennyiben az nem létezik, akkor vannak keretrendszerek, amit ezt lehetővé teszik. Ilyen például az Underscore.js bind metódusa, illetve a jQuery-s proxy függvény.A fenti példát például a következő tökéletesen megoldja:
De hogy értsd is amit Poetro
[Megoldva]
Vagy csinálhatod azt is,
Szerintem elírtad :)
1) Azért nem az az objektum
2) Azért a Server a kontextus, mert a Server objektumnak az .on metódusán belül szándékosan manipulálásra kerül a kontextus arra, hogy a Server legyen a kontextus; ezt a .call()/.apply() metódusokkal csinálta, amit minden böngészőben minden függvény objektumnak alap metódusai.
Az 1-es pontot nem tudod javítani, a 2-es pontot se (mivel ez a Server forráskódjában van), viszont te magad ki tudod trükközni, hogy a kellő kontextus legyen: