ugrás a tartalomhoz

Biztos trivi... prototype.js

fERI · 2009. Május. 12. (K), 23.28
Sziasztok!

Legyen az alábbi kód JavaScript kód (prototype.js-t használva):

var Objektum = Class.create();
Objektum.prototype = {
initialize:function(param1, param2, param3){
\t//tartalma nem lényeges.
},
Metodus1: function(){
\treturn 'Return';
},
Metodus2: function(){
\talert(this.Metodus1());
}
};
 
1

Bocsi fáradt vagyok...

fERI · 2009. Május. 12. (K), 23.36
Sziasztok!

Rossz helyre kattintottam.

Szóval:
Legyen az alábbi kód JavaScript kód (prototype.js-t használva):

var Objektum = Class.create();  
Objektum.prototype = {  
initialize:function(param1, param2, param3){  
//tartalma nem lényeges.
Event.observe(EgyObjektum, 'mouseout', this.Metodus2);  
},  
Metodus1: function(){  
return 'Return';  
},  
Metodus2: function(){  
alert(this.Metodus1());  
}  
};
Amikor a az Objektum.Metodus2-nak kellene futnia a böngésző közli, hogy "Type Error: this.Method1 is not a function"...

Ha nem így, akkor hogy tudom a Metodus2-ből a Metodus1-et meghívni?

Előre is köszönöm a segítséget.

Üdv:
fERI
2

hmm

SamY · 2009. Május. 13. (Sze), 08.06
Szia,

nekem kicsit furcsa a példakód, én valahogy így csinálnám:

// OSZTÁLY LÉTREHOZÁSA
var Osztaly = Class.create( {
  initialize: function( param1, param2, param3 ){    
    //tartalma nem lényeges.  
    Event.observe(EgyObjektum, 'mouseout', this.Metodus2.bind( this ) );   
    // a bind azért szükséges, mert event handler esetén a this "értelme" megváltozik, mivel azt már a prototype hívja meg event esetén
  },    
  Metodus1: function(){    
    return 'Return';    
  },    
  Metodus2: function(){    
    alert( this.Metodus1() );    
  }    
});  

// OSZTÁLYBÓL OBJEKTUM PÉLDÁNYOSÍTÁS
var Objektum = new Osztaly( 'valami1', 'valami2', 'valami3' );  

Lehet, hogy hülyeséget írtam, már egy ideje nem használtam prototype -os osztyálokat, de ha az emlékezetem nem csal, így kellene működnie.
3

this

drifter · 2009. Május. 13. (Sze), 11.54
Event.observe után a meghívott függvénynél a "this" az EgyObjektum-ra fog mutatni (tehát a HTML elemre ami fölé mozgatod a kurzort), és nem az Objektum-ra. Tehát nem lesz Metodus2 metódusa. Legalábbis azt hiszem, most nem próbáltam ki :)
4

Köszönöm a segítséget!

fERI · 2009. Május. 13. (Sze), 21.47
Sziasztok!

Köszönöm mindenkinek a segítséget. A végeredmény ami működik és teszteltem az alábbi kód:

// OSZTÁLY LÉTREHOZÁSA
var Osztaly = Class.create()
Osztaly.prototype = {
    initialize: function(parameter) {
        //tartalma nem lényeges.
    Event.observe(parameter, 'mouseover', this.Metodus2.bind(this));
        // a bind azért szükséges, mert event handler esetén a this "értelme" megváltozik, mivel azt már a prototype hívja meg event esetén  
    },
    Metodus1: function() {
        return 'Return';
    },
    Metodus2: function() {
        alert(this.Metodus1());
    }
};    
  
// OSZTÁLYBÓL OBJEKTUM PÉLDÁNYOSÍTÁS
Event.observe(window, 'load', function(){
var Objektum = new Osztaly($('egyobjektum'));     
});
Remélem hasznos lesz valakinek.

Üdv.
fERI