ugrás a tartalomhoz

innerHTML-be javascript betöltése

gege555 · 2008. Júl. 31. (Cs), 13.29
Sziasztok!

Volna egy olyan problémám, hogy szeretnék egy innerHtml-be úgy betölteni egy táblázatot, hogy a táblázat sorai kattintgatással kiválasztós lehessen. A táblázatban való navigáláshoz az alábbi linket használom:

http://projects.arkanis-development.de/table_navigation/example.html

A kódrészlet amivel próbálkozom:
  1.         var keysHtml = "";  
  2. keysHtml +="<script type='text/javascript' src='jquery.js' ></script>";  
  3. keysHtml +="<script type='text/javascript' src='jquery2.js' ></script>";  
  4. keysHtml +="<script type='text/javascript'> jQuery.tableNavigation();</script>";  
  5. keysHtml +="<style type='text/css'>   tr.selected {background-color: red; color: white;} tr.selected a {color: white;} </style>";         
  6. keysHtml +="    <thead>";  
  7. keysHtml +="        <tr>";  
  8. keysHtml +="            <th>Cell 01</th>";  
  9. keysHtml +="            <th>Cell 02</th>";  
  10. keysHtml +="            <th>Cell 03</th>";  
  11. keysHtml +="</tr>";  
  12. keysHtml +="    </thead>";  
  13. keysHtml +="<tbody>";  
  14. keysHtml +="        <tr>";  
  15. keysHtml +="            <td>Data 01-01</td>";  
  16. keysHtml +="            <td>Data 01-02</td>";  
  17. keysHtml +="            <td><a href='target01.html' class='korte'>Link 01</a></td>";  
  18. keysHtml +="</tr>";  
  19. keysHtml +="        <tr>";  
  20. keysHtml +="            <td>Data 02-01</td>";  
  21. keysHtml +="            <td>Data 02-02</td>";  
  22. keysHtml +="            <td><a href='target02.html' class='korte'>Link 02</a></td>";  
  23. keysHtml +="</tr>";  
  24. keysHtml +="        <tr>";  
  25. keysHtml +="            <td>Data 03-01</td>";  
  26. keysHtml +="            <td>Data 03-02</td>";  
  27. keysHtml +="            <td><a href='target03.html' class='korte'>Link 03</a></td>";  
  28. keysHtml +="</tr>";  
  29. keysHtml +="    </tbody>";  
  30. keysHtml +="</table>";  
  31. keysHtml += "</div>";  
  32. document.getElementById("keys").innerHTML = keysHtml;  
  33. document.getElementById("keys").style.display = "block";   
A class='alma' illetve 'korte' definiálható a js-ben. (alapban navigateable ill. activation)

Esetleg van valakinek ötlete azzal kapcsolatban, hogy mit rontok el, illetve, hogy ilyenformán ezt meg lehet-e valósítani.

A segítséget előre is köszönöm.

Gergő
 
1

már volt

jaczkog · 2008. Júl. 31. (Cs), 16.34
A múltkor hasonló témában ment a társalgás itt:
http://weblabor.hu/forumok/temak/21949
2

kösz

gege555 · 2008. Júl. 31. (Cs), 17.11
köszönöm a gyors választ. sajnos nem jutottam előbbre. még keresgélek. igazából nem vagyok ebben nagy guru, de ez a feladat meg kell oldanom :)
3

ezt így nem lehet.

solkprog · 2008. Júl. 31. (Cs), 18.18
Erre hibát dob a böngésző:
  1. keysHtml +="<script type='text/javascript' src='jquery.js' ></script>";  
Ajánlom figyelmedbe jaczkog hozzászólását hogy miért teszi.

üdv,
Balázs
4

És még egy gondolatébresztő...

Ustak · 2008. Aug. 1. (P), 10.51
A fentieken kívül még ilyet is tehetsz, ha már annyira innerHTML :-)

Elő a firebugot és próbáld ki
  1. var cica=function(){  
  2.     alert('miáú');  
  3. };  
  4. var maindiv=document.getElementById('main'); //ez a weblabor main divje  
  5. var script=document.createElement('script');   
  6. script.innerHTML='('+cica+')();';  //ez az önmagát végrehajtó függvény minta (self execution function pattern :-))  
  7. maindiv.appendChild(script);  
Lassan már kész a cikk, amit ilyesféle dolgokból írok, türelem :)
5

off off

solkprog · 2008. Aug. 1. (P), 13.06
Szívesen olvasnám már a cikked, de inkább lassan írd meg mind hogy összecsapd....
Abból amit egy két szóban itt-ott mondtál abból azt szűrtem le hogy nem pont erről fog szólni a cikked de szerintem nem volna rossz ezeket is egyszer és végleg tisztázni (fejekben, fejemben).
Akkor jöjjön még egy két egyszerű példa:
  1. kutya=function () {  
  2.     alert(arguments[0]);  
  3. }  
  4. kutya('vau');   //lefut  
  5. (kutya)('vau'); //lefut. Ennek egyébként van valami különösebb értelme?  
  6. ((kutya))('vau');   //lefut  
  7. (((kutya)))('vau'); //És ez is lefut.  
  1. kutya=function () {  
  2.     alert(arguments[0]);  
  3. }('vau');   //lefut  
  1. function kutya () {  
  2.     alert(arguments[0]);  
  3. }('vau');   //Fenti példával ellentétben nem fut le, de hibát nem dob.  
  1. kutya=(function () {  
  2.     alert(arguments[0]);  
  3. })('vau');  //lefut  
  1. (function kutya () {  
  2.     alert(arguments[0]);  
  3. })('vau');  //lefut. "Egyenértékű" a fenti példával  
  1. //És egy ráadás:  
  2. kutya=function () {  
  3.     return function () {  
  4.         alert(arguments[0]);  
  5.     };  
  6. }()('vau'); //lefut  
üdv,
Balázs
6

Utánanézek rendesen...

Ustak · 2008. Aug. 1. (P), 13.49
igazad van, utána fogok nézni a témának rendesen. Addig inkább nem is írok rá semmit, csak belezavarodnék úgyis :)
Azért még egy ráadás:
  1. (function(){  
  2.     alert(arguments[0]);  
  3. })('Anonymus kutya vagyok vau!'); //lefut :-)  
7

(kutya)('vau'); //lefut. Ennek egyébként van valami különös

toxin · 2008. Aug. 1. (P), 13.50
  1. (window.console && window.console.log || alert)("hello world");  
  2. (document.getElementById("foo").style.display ? hide : show )("someElem");  
ilyesmik így hirtelen

üdv Csaba
10

:) erre nem gondoltam.

solkprog · 2008. Aug. 1. (P), 20.02
Köszönöm a példát. Be valóm férfiasan erre nem gondoltam (kicsit szégyen is...).
(Azt külön köszönöm hogy "használható" példát írtál.)

Ilyenkor jut eszme hogy hihetetlen az hogy egyesek hogy lehúzzák a JavaScript-et, közben ha az ember (ki) tudja használni akkor milyen sok mindent ki lehet belőle hozni. (Erre légyszíves ne válaszoljatok nem akarok még egy flame-t indítani. köszönöm)

szerkesztve
üdv,
Balázs
8

Azért nem fut le, mert...

Török Gábor · 2008. Aug. 1. (P), 14.58
A function fv () {} csak egyszerűsített jelölése a var fv = function() {};-nek. Ezért nem a várt eredményt hozza az alábbi kódod, ahol a ('vau'); már mint a függvénydeklarációtól független kifejezés értékelődik ki. Szintaktikailag helyes, csak nincs látható kimenete.
  1. function kutya () {    
  2.      alert(arguments[0]);    
  3. }('vau');   //Fenti példával ellentétben nem fut le, de hibát nem dob.   
9

new

toxin · 2008. Aug. 1. (P), 15.26
new operátornál mi a helyzet, csak mert alábbi kód
  1. var fooObjCollection = {                  
  2.                 fooObj : (function(){  
  3.                     var priVar = "privát";  
  4.                     return new (function(){  
  5.                         this.writePriv = function(){  
  6.                             alert(priVar);  
  7.                         };  
  8.                     });  
  9.                 })()  
  10.             };  
  11.               
  12.             fooObjCollection.fooObj.writePriv();          
ill.
  1. var fooObjCollection = {                  
  2.                 fooObj : (function(){  
  3.                     var priVar = "privát";  
  4.                     return new function(){  
  5.                         this.writePriv = function(){  
  6.                             alert(priVar);  
  7.                         };  
  8.                     };  
  9.                 })()  
  10.             };  
  11.               
  12.             fooObjCollection.fooObj.writePriv();          
példában müxik, de valós kódban (jóval komplexebb) alábbi már nem objektumot, hanem konstruktort ad vissza, de lehet, hogy ezek szerint el... valahol :)

üdv Csaba
11

Nézd csak:

Ustak · 2008. Aug. 1. (P), 22.23
  1. var fooObjCollection = {                    
  2.                  fooObj : (function(){    
  3.                      var priVar = "privát";    
  4.                      return new function insideFoo(){    
  5.                          this.writePriv = function(){    
  6.                              alert(priVar);                         
  7.                         };  
  8.                        
  9.                      };    
  10.                  })(),  
  11.                 foo2Obj:function(){  
  12.                        
  13.                     }                     
  14.                   
  15.              };    
  16.                  
  17.              fooObjCollection.fooObj.writePriv();  
  18.              alert(typeof fooObjCollection.fooObj); //object  
  19.              alert(typeof fooObjCollection.foo2Obj); //function  

Olvastam ilyenről, úgy tudom, ha egy függvényt a new operátor segítségével adjuk értékül egy tulajdonságnak (ahogy a fooObj-nél teszed) akkor előbb a new egy üres objektumot "teremt" majd lefut a függvény, és ha volt a függvényben this kulcsszó, akkor az a new által létrehozott üres objektumra fog mutatni (tehát itt a fooObj-re). Azért adtam neki az insideFoo nevet, hogy lássuk, ez csak egy normál függvény, melyet nem neveztél el. Lehetne a deklarálva kód elején is, persze akkor nem működne a closure és a privát változót nem érnéd el. A második esetben nincs new kulcsszó, tehát nem üres objektum kreálással indítunk, és ezért a végén a két typeof operátor is helyesen a valós értékeket adja vissza: Először objectet (a new kulcsszó miatt) másodszor function-t, mivel tényleg azt adtunk értékül.
Ha nagybetűvel kezdjük (new Function("a","b","{//kód}") akkor az olyasmi mint az eval, és gyakorlatilag string-ként adom meg az argumentumokat majd a függvény kódját magát. Sosem használtam ilyet :-). Az biztos, hogy a closure-this es dologba én magam sokszor belekavarodok, de nagyon érdekes dolognak tartom mindazáltal -a nyelv sava borsa :-).
Egyébként nem valami ilyesmire gondoltál:
  1. var Osztaly = (function(){  
  2.        //privát osztályszintű tulajdonságok, metódusok  
  3.        var objektumszam=0;  
  4.        function errorCheck() {  
  5.          //mitudomén mit ellenőríz...:-)  
  6.         return true;  
  7.         };  
  8.           
  9.         //visszatérünk a konstructor kóddal  
  10.         return function(argumentum1,argumentum2) {  
  11.           
  12.         //privát tulajdonságok  
  13.         var priv1,priv2;  
  14.           
  15.         //'privilegied' metódusok- elérik a privát tul.-okat  
  16.         this.getPriv1=function() {  
  17.                 return priv1;  
  18.         };  
  19.         this.getPriv2=function() {  
  20.                 return priv2;  
  21.         };  
  22.         this.setPriv1=function(argumentum1) {  
  23.                 if (!errorCheck(argumentum1)) throw new Error('Nana! Valamit rosszul adtál meg!');  
  24.                 priv1=argumentum1;  
  25.         };  
  26.         this.setPriv2=function(argumentum2) {  
  27.                 priv2=argumentum2;  
  28.         };  
  29.         //konstruktor kód...  
  30.         objektumszam++;  
  31.         alert('objektumok száma: '+objektumszam);  
  32.         this.setPriv1(argumentum1);  
  33.         this.setPriv2(argumentum2);  
  34.     }  
  35. })();  
  36. //osztályszintű publikus metódus:  
  37. Osztaly.fuggveny=function(){  
  38. };  
  39. //publikus objektum szintű metódusok  
  40. Osztaly.prototype={  
  41.       kiir:function(){  
  42.         alert('ihol arg1: '+this.getPriv1()+' és itt az arg2:  '+this.getPriv2()+'');   
  43.         }  
  44. }    
  45. obj1=new Osztaly('cica','mica');  
  46. obj1.kiir();  
  47. obj2=new Osztaly('kutya','mutya');  
  48. obj2.kiir();  

Érdekesnek érdekes, de még nem használtam ezt sem :)
12

newszizás

toxin · 2008. Aug. 2. (Szo), 09.19
az én kódomban ez volt a különbség
  1. new (function(foo){ this.foo = foo || "foo" })  
vs
  1. new function(a){  this.foo = foo || "foo" }  
mindkettő objektumot ad vissza, valós kódomban a lenti valamiért nem :S ,


Egyébként nem valami ilyesmire gondoltál:


http://yuiblog.com/blog/2007/06/12/module-pattern , http://weblabor.hu/blog/20080113/module-pattern , ill. valahol a Pro JavaScript™ Design Patterns Copyright © 2008 by Ross Harmes and Dustin Diaz könyvben is benne, de hamár előbbiből idézel akkor tudom mondani konkrétan, érdekel is kihogy csinálta volna :)

http://www.liligo.fr/homepage/hotel.jsp indítva keresést, a találati oldalon pl. Budapestre keresve, találkozhatsz google térképpel, m$ http://voyages.fr.msn.com/msn/hotels/ 'természetesen' nem járult hozzá előbbi térkép motornak saját oldalán történő szerepeltetéséhez, ergo nekem most a kódba egy térkép motor váltót kell beépítenem ami képes: térkép motor nélkül, google motorral ill. m$ virutal earth térkép motorral is, moduláris jelleggel, meghajtódni, egy külső paramétertől függően: "nomap","msmap","gmap". Az elképzelésem az volt, hogy mindkét motor api-ját becsomagolom adapter pattern/wrapper osztályba, egységes interfészt létrehozva számukra, majd paramétertől függően, factory pattern segítségével, aktuális wrapper-t átadom egy proxy pattern-ek lévén a térkép a találati oldal elindításakor nem, csak adott feltételek (térkép tabra, térkép linkre kattintva jelenik meg, nomap esetén meg soha). Itt jön a valószinű hiba, liligo, nem általam írt js framework-je képes Absztakt osztályok szimulálására, amit én az interfészek konzisztenciájának ellenőrzésére használtam (elv. Interfaces alatt van a fenti könyvben), azaz a framework alábbi esetben
  1. var fooAbstract = Abstract({  
  2.     interfaceMethod1 : null,  
  3.     interfaceMethod2 : null,  
  4.     interfaceMethod3 : null  
  5. });  
  6.   
  7. var fooObject = new(Class(fooAbstract,{  
  8.     interfaceMethod1 : function(){  
  9.           
  10.     },  
  11.    interfaceMethod3 : function(){  
  12.           
  13.     }  
  14. }));  
hibát dobna: interfaceMethod2 nem szerepel a lenti példányosításban, liligo framwork Class függvénye pedig konstruktort ad vissza, ezért volt a fenti new-al kapcsolatos kérdésem, ha nem használok zárójelt tehát
  1. var fooObject = new Class(fooAbstract,{  
  2.                method1 : function(){  
  3.                      
  4.                },  
  5.                method3 : function(){  
  6.                      
  7.                }  
  8.            });  
konstruktor kapok vissza, fooObject-em function volt :S , nézzük akkor a térképváltó implementálását zanzásítva
  1. (function(){  
  2.       
  3.     //mindenféle segéd függvény globális névteret nem szenyezve  
  4.     var fooUtilMethods;   
  5.     //aktuális térkép motor api-ját elrejető wrapper interfészelemi  
  6.     var mapInterface = Abstract({  
  7.             mapInitMethod       : null,                   
  8.             mapInterfaceMethod1 : null,  
  9.             mapInterfaceMethod2 : null,  
  10.             mapInterfaceMethod3 : null  
  11.             /* stb... */  
  12.     });  
  13.       
  14.     // aktuális térkép motort meghajtó objektum példányosítása                
  15.     var mapFactory = function(){  
  16.         //mindenféle segéd függvény a térképeknek  
  17.         var fooUtilMethods;  
  18.           
  19.         // aktuális térkép motor hívásokat rejtő wrapper objektumot ad vissza   
  20.         return {  
  21.             // a visszaadott wrapper-ben minden interészelemnek szerepelni kell  
  22.             // akkor is ha nincs térkép, hiszen a külső kód, proxy-n keresztül  
  23.             // hivogatni fogja   
  24.             nomap : (function(){  
  25.                 var map = {};  
  26.                 for (var method in mapInterface.prototype)  
  27.                     map[method] = function(){};  
  28.                 return map;  
  29.             })(),  
  30.               
  31.             gmap : (function(){  
  32.                 //mindféle google maphoz kötődö priv segédfüggvény  
  33.                 var somePrivatMethodForGmap;  
  34.                 // gmap wrapperének implemtánciója, interfészellenőrzéssel  
  35.                 // metódusban már konkért gmap ill. hozzá kötödő metódusokat szerepelnek  
  36.                 // zárójel nélkül konstruktor jött vissza  
  37.                 return new (Class(mapInterface,{  
  38.                     mapInitMethod       : function(){/*.....*/},  
  39.                     mapInterfaceMethod1 : function(){/*.....*/},  
  40.                     mapInterfaceMethod2 : function(){/*.....*/},  
  41.                     mapInterfaceMethod3 : function(){/*.....*/},  
  42.                     /* stb... */  
  43.                 }));                              
  44.             })(),  
  45.               
  46.             msmap : (function(){  
  47.                 //mindféle msmap-hoz kötődö priv segédfüggvény  
  48.                 var somePrivatMethodForVEmap;  
  49.                 // VEmap wrapperének implemtánciója, interfészellenőrzéssel  
  50.                 // metódusban már konkért VEmap ill. hozzá kötödő metódusokat szerepelnek  
  51.                 // zárójel nélkül konstruktor jött vissza  
  52.                 return new (Class(mapInterface,{  
  53.                     mapInitMethod       : function(){/*.....*/},  
  54.                     mapInterfaceMethod1 : function(){/*.....*/},  
  55.                     mapInterfaceMethod2 : function(){/*.....*/},  
  56.                     mapInterfaceMethod3 : function(){/*.....*/},  
  57.                     /* stb... */  
  58.                 }));                              
  59.             })()                          
  60.         }[config.mapType/*nomap,msmap,gmap*/]                 
  61.     };  
  62.       
  63.     //mivel a térkép nem a találati oldallal inicializálódik  
  64.     //szükség van egy proxy-ra, a külső kód ezen keresztül kommunikál  
  65.     //a wrapper objektummal, ez az egyetlen globál névtérbe kikerülő objektum  
  66.     //ebben a kódblokkban,   
  67.     //  liligo framework képes objektumot  
  68.     // singleton-t is visszadni, init-je egyből lefut, absztarkt-ból  
  69.     // itt is történik interészellenőrzés   
  70.      map = Singleton(mapInterface,{  
  71.           
  72.         init : function(){  
  73.             // megkapjuk az aktuális paramnak megfelelő wrapper objektumot  
  74.             this.map = mapFactory();  
  75.             // csak adott konstelláció esetén indul a csak térkép el, addig a proxy  
  76.             // visszadobja a külső hivásokat  
  77.             this.initialized = false;  
  78.         },  
  79.           
  80.         initialize : function(){  
  81.             if(this.initialized) return;  
  82.             this.initialized = true;  
  83.             this.map.mapInitMethod();  
  84.         },  
  85.           
  86.         mapInterfaceMethod1 : function(){  
  87.             if (!this.initialized) return;  
  88.             //mindeféle adott metódussal kapcsolatos dolog  
  89.             //ill. a wrapper objektum is meghívásra kerül  
  90.             this.map.mapInterfaceMethod1();  
  91.         },  
  92.         mapInterfaceMethod2 : function(){  
  93.             if (!this.initialized) return;                        
  94.             //mindeféle adott metódussal kapcsolatos dolog  
  95.             //ill. a wrapper objektum is meghívásra kerül  
  96.             this.map.mapInterfaceMethod2();  
  97.         },  
  98.         mapInterfaceMethod3 : function(){  
  99.             if (!this.initialized) return;  
  100.             //mindeféle adott metódussal kapcsolatos dolog  
  101.             //ill. a wrapper objektum is meghívásra kerül  
  102.             this.map.mapInterfaceMethod3();  
  103.         }                     
  104.      });  
  105.       
  106. })();  
  107.   
  108. // kívűről, legyen ms,google vagy nomap már csak ennyi a többi kolléga dolga  
  109. config = {  
  110.     mapType : "gmap" //gmap,msmap,nomap  
  111. }              
  112. // amig nincs a térkép elindítva nemsokat csinál  
  113. map.mapInterfaceMethod1();  
  114. map.initialize();  
  115. // ittmár annál inkább :)  
  116. map.mapInterfaceMethod2();  
  117. map.mapInterfaceMethod3();  
  118. /* stb */           
nagyon jobban nem fejteném ki hiszen a Pro JavaScript™ Design Patterns Copyright © 2008 könyvben minden fenti pattern ill. megoldás részletesen kifejtve szerepel

üdv Csaba

elnézést a liligo framework-től függő kódért, és kódszinező is lenyelt egykét betűt, remélem azért érthető maradt vmmennyire
13

Nem akartam...

Ustak · 2008. Aug. 2. (Szo), 10.30
okoskodni, még ha úgy is tűnt :) Én is láttam már a könyvet és tényleg abból loptam a mintát, hátha segít. Láttam a zárójelek különbségét, és már erről is valahol olvastam, de nem emlékszem pontosan, valami olyasmi rémlik hogy az interpreternek segítség a kiértékelésben, de nem találtam róla semmit...ez pedig érdekel nagyon, ha valaki egy linket tudna róla adni, jó lenne. És persze mint említettem gyakorlatban ilyen bonyolult mintát nem használtam még, gratulálok hozzá, hisz ez végre gyakorlati példa, és bocsi az okoskodásért.
14

mintát lopni :))) azért vannak

toxin · 2008. Aug. 2. (Szo), 11.33
erről a Practical JavaScript™, DOM Scripting, and Ajax Projects könyvbeli ábra ugrott be :) bár ez a js framework-ökre vonatkozott. Egyébként az általad behozott minta inkább Singleton-ok gyártásakor hasznos szvsz, ilyen mintából a privát stb. változók miatt kicsit nehézkes örökíteni, arra inkább szintén a ProPattern könyvbeli klasszikus örökítést megvalósító minta alkalmas, összekötöttem http://www.crockford.com/javascript/inheritance.html#sugar Crockford method-method-jával, így viszonylag olvasható tradicionális OOP öröklődést megvalósító kódhoz jutunk, hasznos ha ezt szeretjük, de nem akarunk ilyet megvalósító framework-öt vmiért becsatolni. http://htmlinfo.polyhistor.hu/js13guide/obj2.htm#1008404 szereplő osztályhierarchia így néz ki benne:
  1. /* 
  2.  * konstruktor függvény prototype-jának bővítése 
  3.  * FooClass.method("fooMethod",function(){...}).method... 
  4.  */               
  5. Function.prototype.method = function(name/*string*/,method/*function*/){  
  6.     this.prototype[name] = method;  
  7.     //lehetőve teszi a láncolást  
  8.     return this;  
  9. };  
  10.   
  11. /* 
  12.  * klasszikus öröklődést megvalósítő util függvény 
  13.  * extend(someClass,parentClass); 
  14.  */  
  15. var extend = function(klass/*function*/, parentClass/*function*/){  
  16.     // a parentClass konstruktorára nincs szükség, kiütjük     
  17.     var F = function(){};             
  18.     F.prototype = parentClass.prototype;  
  19.     // prototype láncolás létrehozása  
  20.     klass.prototype = new F;  
  21.     // konstruktor mutató átállítása  
  22.     klass.prototype.constructor = klass;  
  23.     // ősosztály mutató hozzáadása                
  24.     klass.parentClass = parentClass.prototype;                           
  25. };  
  26.   
  27. /*--*/  
  28.   
  29. var Employee = function(name,dept){  
  30.     this.name = name;  
  31.     this.dept = dept;  
  32. };  
  33. Employee.method(  
  34.     "getName",function(){  
  35.         return this.name;  
  36.     }  
  37. ).method(  
  38.     "setName",function(pName/*string*/){  
  39.         this.name = pName;  
  40.     }  
  41. ).method(  
  42.     "getDept",function(){  
  43.         return this.dept;  
  44.     }  
  45. );  
  46.   
  47. /*--*/  
  48.   
  49. var Manager = function(name,dept,reports){  
  50.     Manager.parentClass.constructor.call(this,name,dept);  
  51.     this.reports = reports;       
  52. };  
  53. extend(Manager,Employee);  
  54. Manager.method(  
  55.     "getReports",function(){  
  56.         return this.reports;                      
  57.     }  
  58. ).method(  
  59.     "setReports",function(reports/*array*/){  
  60.         this.reports = reports;                   
  61.     }  
  62. );  
  63.   
  64. /*--*/  
  65.   
  66. var WorkerBee = function(name,dept,projects){  
  67.     WorkerBee.parentClass.constructor.call(this,name,dept);  
  68.     this.projects = projects;         
  69. };  
  70. extend(WorkerBee,Employee);  
  71. WorkerBee.method(  
  72.     "getProjects",function(){  
  73.         return this.projects;                     
  74.     }  
  75. ).method(  
  76.     "setProjects",function(projects/*array*/){  
  77.         this.projects = projects;                     
  78.     }  
  79. );  
  80.   
  81. /*--*/  
  82.               
  83. var SalesPerson = function(name,dept,projects,quote){  
  84.     SalesPerson.parentClass.constructor.call(this,name,dept,projects);  
  85.     this.quote = quote;       
  86. };  
  87. extend(SalesPerson,WorkerBee);  
  88. SalesPerson.method(  
  89.     "getQuote",function(){  
  90.         return this.quote;                    
  91.     }  
  92. ).method(  
  93.     "setQuote",function(quote/*array*/){  
  94.         this.quote = quote;  
  95.     }  
  96. );  
  97.   
  98. /*--*/  
  99.   
  100. var Engineer = function(name,dept,projects,machine){  
  101.     Engineer.parentClass.constructor.call(this,name,dept,projects);  
  102.     this.machine = machine;       
  103. };  
  104. extend(Engineer,WorkerBee);  
  105. Engineer.method(  
  106.     "getMachine",function(){  
  107.         return this.machine;                      
  108.     }  
  109. ).method(  
  110.     "setMachine",function(machine/*string*/){  
  111.         this.machine = machine;  
  112.     }  
  113. );  
  114.   
  115. /*--*/  
  116. var jim     = new Employee("jim","Employee"),  
  117.     sally   = new Manager("Sally","Manager",[]),  
  118.     mark    = new WorkerBee("Mark","WorkerBee",[]),  
  119.     fred    = new SalesPerson("Fred","SalesPerson",[],100),  
  120.     jane    = new Engineer("Jane","Engineer",[],"");  
  121.       
  122. console.log(jim.getName());  
  123. console.log(jim.getDept());  
  124. console.log("---");           
  125.   
  126. console.log(sally.getName());  
  127. console.log(sally.getDept());  
  128. sally.setReports(["a","b","c"]);  
  129. console.log(sally.getReports());                                      
  130. console.log("---");  
  131.   
  132. console.log(mark.getName());  
  133. console.log(mark.getDept());  
  134. mark.setProjects(["d","e","f"]);  
  135. console.log(mark.getProjects());  
  136. console.log("---");  
  137.   
  138. console.log(fred.getName());  
  139. console.log(fred.getDept());  
  140. fred.setProjects(["g","h","i"]);  
  141. console.log(fred.getProjects());  
  142. console.log(fred.getQuote());  
  143. console.log("---");  
  144.   
  145. console.log(jane.getName());  
  146. console.log(jane.getDept());  
  147. jane.setProjects(["j","k","l"]);  
  148. jane.setMachine("árvíztűrő tükörfúrógép");  
  149. console.log(jane.getProjects());  
  150. console.log(jane.getMachine());           
  151.               


üdv Csaba