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
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
Super (y) díky moc, to je přesně ono (mám dojem, že už jsem na to i někde narazil) :)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: