ugrás a tartalomhoz

JavaScript öröklés probléma

Max Logan · 2007. Május. 10. (Cs), 14.51
Van egy ojjektumom:
  1. class_Block()  
  2. {  
  3.   // Az ojjektum törje  
  4. }  
Ezt szeretném kibővíteni
  1. uj_ojjektum.prototype = new class_Block();  
  2.   
  3. uj_ojjektum.prototype.uj_tagfuggveny = function() { alert('Hello World'); }  
A probléma az, hogy ennél a sornál
  1. uj_ojjektum.prototype = new class_Block();  
azt mondja a FireBug, hogy nem létezik az uj_ojjektum.

Ha ezt írom
  1. class_Block.prototype.uj_tagfuggveny = function() { alert('Hello World'); }  
akkor ok, de nekem nem erre van szükségem.

Mi lehet a probléma?
 
1

Lemaradt

Max Logan · 2007. Május. 10. (Cs), 14.52
Lemaradt a function ...
  1. function class_Block()  
  2. {  
  3.   // Az ojjektum törje  
  4. }  
2

nem ok nélkül

Fraki · 2007. Május. 10. (Cs), 16.19
Lemaradt a function ...

Nyilván bezavart a név, azazhogy a class-szal (lefoglalt kifejezés) plusz alulvonással kezdődik.
Tanulság: követni kell az elnevezési konvenciókat.
3

Félreértetted ...

Max Logan · 2007. Május. 10. (Cs), 19.32
Csak a fenti bejegyzésből maradt le a function, a kódban megvolt ...

Közben összejött a dolog. Az nem zavar be, hogy az "őszosztály" nevében ott a class és van aláhúzásjel. Arra hivatkozott, hogy nem létezik az uj_ojjektum, hát csináltam egyet:
  1. function class_Block() // Az "ősosztály"  
  2. {  
  3.   // Az ojjektum törje  
  4. }  
  5.   
  6. uj_ojjektum = function() {}   
  7.   
  8. uj_ojjektum.prototype = new class_Block();  
  9.   
  10. uj_ojjektum.prototype.uj_tagfuggveny = function() { alert('Hello World'); }  
  11.   
  12. egyed = new uj_ojjektum();  
Ami nekem furcsa az az, hogy az örökítés közben on-the-fly miért nem jön létre az uj_ojjektum, mint objektum. Egy sort meg lehetne spórolni úgy ...

UpDate:

A prototype alapú öröklés tőlem eléggé idegen, ezért inkább így oldottam meg a dolgot:
  1. function class_parent() // Az "ősosztály"  
  2. {  
  3.    this.id = 'vmi';  
  4.   
  5.    this.method_01 = function()  
  6.    {  
  7.       // Tagfüggvény törzse ...  
  8.    }  
  9.   
  10.    this.method_02 = function()  
  11.    {  
  12.       // Tagfüggvény törzse ...  
  13.    }  
  14. }  
  15.   
  16. function class_child() // A "gyerekosztály"  
  17. {  
  18.    class_parent.call(this);  
  19.   
  20.    this.method_03 = function()  
  21.    {  
  22.       // Tagfüggvény törzse ...  
  23.    }  
  24. }  
  25.   
  26. var obj = new class_child();