ugrás a tartalomhoz

JavaScript öröklés probléma

Max Logan · 2007. Május. 10. (Cs), 14.51
Van egy ojjektumom:

 class_Block()
 {
   // Az ojjektum törje
 }
Ezt szeretném kibővíteni

  uj_ojjektum.prototype = new class_Block();

  uj_ojjektum.prototype.uj_tagfuggveny = function() { alert('Hello World'); }
A probléma az, hogy ennél a sornál

  uj_ojjektum.prototype = new class_Block();
azt mondja a FireBug, hogy nem létezik az uj_ojjektum.

Ha ezt írom

  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 ...

 function class_Block()
 {
   // Az ojjektum törje
 }
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:

 function class_Block() // Az "ősosztály"
 {
   // Az ojjektum törje
 }

 uj_ojjektum = function() {} 

 uj_ojjektum.prototype = new class_Block();

 uj_ojjektum.prototype.uj_tagfuggveny = function() { alert('Hello World'); }

 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:

 function class_parent() // Az "ősosztály"
 {
    this.id = 'vmi';

    this.method_01 = function()
    {
       // Tagfüggvény törzse ...
    }

    this.method_02 = function()
    {
       // Tagfüggvény törzse ...
    }
 }

 function class_child() // A "gyerekosztály"
 {
    class_parent.call(this);

    this.method_03 = function()
    {
       // Tagfüggvény törzse ...
    }
 }

 var obj = new class_child();