Autor | Zpráva | ||
---|---|---|---|
Tonny Profil |
Ahoj,
jsem nováčkem do OOP a snažím se to naučit. Mimojiné za tímto účelem jsem začal tvořit vlastní engine pro práci s izometrickým prostředím. Dnes jsem se pustil do refactoringu a snažím se to předělat na lepší (profesionálnější) strukturu, nicméně jsem narazil na tento problém: function iwe(){ this.Map = {...}; this.Tile = {...}; ... this.TRANSFORM = { toIso: function (x,y){ var isoX = ((x-y)* ([TILE].width/2))+[MAP].offset.x; .... }, toModel .... ... } ... Potřebuji se dostat k [TILE] a [MAP] (this.Tile/this.Map), ale nevím jak na to, jelikož this bude v tomto případě odkazovat ne na konstruktor ale na objekt (na parametr) TRANSFORM. Napadlo mě, že by to šlo dělat pomocí nějakých globálních proměnných, ale to rozhodně nepříjde jako čisté řešení, takže se jsem skončil tady :) Je možné, že jsem někde přehlédnul nějakou jednoduchou věc v kapitole o OOP, ale prostě nevím, jak na to. Díky moc za váš čas a odpovědi :) Tony |
||
xROAL Profil |
#2 · Zasláno: 20. 5. 2014, 19:35:43
function iwe(){ var that = this; this.Map = {...}; this.Tile = {...}; ... this.TRANSFORM = { toIso: function (x,y){ var isoX = ((x-y)* (that.Tile.width/2))+that.Map.offset.x; .... }, toModel .... ... } ... V JavaScripte a hlavne v OOP som tiež ešte celkom nováčik, toto je asi jediný spôsob o ktorom ja osobne viem a ktorý aj používam. |
||
Chamurappi Profil |
Reaguji na Tonnyho:
Lokální proměnné jsou dostupné kdekoliv uvnitř funkce, v níž jsou definované. Takže uvnitř iwe můžeš vyrobit třeba var that = this a v toIso pracovat s that.Tile a that.Map .
Edit: xROAL mě předběhl, aspoň to máš potvrzené :-) „jelikož this bude v tomto případě odkazovat ne na konstruktor ale na objekt (na parametr) TRANSFORM“ Jen poopravím, že this odkazuje vždy na objekt, ne na konstruktor… akorát ty chceš, aby odkazoval na instanci objektu vytvořenou konstruktorem iwe .
|
||
Tonny Profil |
#4 · Zasláno: 20. 5. 2014, 19:39:50
Super (y) díky moc, to je přesně ono (mám dojem, že už jsem na to i někde narazil) :)
|
||
Časová prodleva: 10 let
|
0