9. …akkor mi a probléma?
Csak egyfajta függvény
létezik, és sok helyen kell:
Timeout, AJAX, események,
tömb kezelő függvények, stb…
10. Az egyik megoldás: „_this”
.method = function() {
var _this = this;
return this.myArr.map(function(val) {
return _this.scale * val;
});
};
11. A másik (nem) megoldás az új fv
.method = function() {
return this.myArr.map(
#(val) { this.scale * val; }
);
};
12. A másik (nem) megoldás az új fv
.method = function() {
return this.myArr.map(
#@(val) { -> @scale * val; }
);
};
13. Egy alternatív lehetőség a „that”
function MyClass() {
var that = this;
that.method = function() {
return that.myArr.map(function(val) {
return that.scale * val; });
}
return that;
};
16. Milyen egy osztály?
Egy osztályban
- először leírjuk a struktúrát,
amit aztán nem változtatunk
- van lehetőség az adattagok és
metódusok láthatóságának
meghatározására
17. Milyen egy osztály?
Egy osztályban
- a definíciós részen mondom
meg a láthatóságot, utána
nem kell foglalkoznom vele
18. Milyen egy osztály?
Egy osztály
- metódusai nem élnek
különálló életet (a metódus
„kötve van” az osztályhoz)
19. Milyen egy osztály?
Egy osztály
- metódusait felül lehet
definiálni, ez az ősosztályban is
érvényesül, de el tudom érni
az eredetit
20. Milyen egy osztály?
Egy osztály
- példányai ellenőrizhetőek
instanceOf „függvénnyel”
(a leszármazott osztály
példányai is!)
21. Milyen egy osztály?
Egy osztály
- ősosztályának protected tagját
publikussá tehetem az
ősosztály változtatása nélkül
22. ES5Class
function MyClass() {
var that = Module.create(this);
that.private.prop = 42;
that.protected.str = ‘Hello’;
that.public.bool = true;
return Module.finalize( that );
}
var o = new MyClass(); o.bool === true;
o.prop === o.str === undefined
23. ES5Class
function MySubClass() {
var that = Module.create(this, MyClass);
that.public.method = function() {
alert(that.str); // ‘Hello’
};
return Module.finalize( that );
}
24. ES5Class
function MyClass2() {
var that = Module.create(this, arguments);
that.private.count = 0;
that.__constructor__ = function(init) {
that.count = init; // 12
};
/*…*/
}
new MyClass2(12);
25. ES5Class
var o = new MySubClass();
Module.instanceOf(o, MySubClass ) // true
Module.instanceOf(o, MyClass ) // true