ugrás a tartalomhoz

JavaScript osztály

mgergo90 · 2010. Feb. 8. (H), 22.49
Sziasztok!

Adott a következőosztály:

<script>
ProbaOsztaly.prototype =
{
    obj : null,
    Elso : function()
    {
        this.obj = document.getElementById('div');
        this.Masodik();
    },
    Masodik : function()
    {
       alert(this.obj);
    }
}

ProbaOsztaly() {}

var osztaly = new ProbaOsztaly();
osztaly.Elso(); // null

</script>
Ez miért ezt eredményezi és miért nem ezt [objectHTMLDivElement] ?
 
1

Ez miért ezt eredményezi és

mgergo90 · 2010. Feb. 9. (K), 00.09
Ez miért ezt eredményezi és miért nem ezt [objectHTMLDivElement] ?

Vagyis miért null-t ír ki?
2

kis átalakítás

Drawain · 2010. Feb. 9. (K), 00.14
A példakódod egy kis átalakításra szorul:

function ProbaOsztaly() {}

ProbaOsztaly.prototype = {
    obj : null,
    elso : function() {
        this.obj = document.getElementById('div');
        this.masodik();
    },
    masodik : function() {
        alert(this.obj);
    }
}

var osztaly = new ProbaOsztaly();
osztaly.elso();
Ekkor jó elemet fogsz kapni, ha létezik div id-vel ellátott elemed! (tehát ez nem biztos, hogy egy valódi div, bárminek lehet ilyen azonosítója, te adod meg).

A metódusokat kisbetűvel érdemes írni, csak a konstruktorfüggvényeket szokás nagy kezdőbetűvel, de ez nem olyan nagy hiba.

Az már annál inkább, hogy a függvényt rosszul hoztad létre (lemaradt a function kulcsszó), illetve, hogy ezt egyáltalán azután próbáltad megtenni, hogy a prototípusát már állítgattad (ekkor ugye még nem hoztad létre a ProbaOsztaly objektumot).
3

osztály tulajdonságok

mgergo90 · 2010. Feb. 9. (K), 16.25
Továbbra sem boldogulok vele, a teljes kód így néz ki, egy divet kellene mozgatnia az egér pozíciójának megfelelően.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
<script>

 function ProbaOsztaly() {}  
   
 ProbaOsztaly.prototype = {  
     obj : null,  
     x:10,
	 y:10,
	 dx:10,
	 dy:10,
	 mozgatas : false,
	 
	 Setup : function()
	 {  
		 this.obj =  document.getElementById('negyzet');
		 this.obj.addEventListener('onmousedown',this.Drag,false);
     },  
     Drag : function() {
		 this.mozgatas = true;
		 this.dx = this.x - this.obj.offsetLeft;
		 this.dy = this.y - this.obj.offsetTop;
    },
	Move : function(e)
	{
		if (!e) var e = document.event;
		this.x = e.screenX;
		this.y = e.screenY;
		if (this.mozgatas)
		{
			var actx = this.x - this.dx;
			var acty = this.y - this.dx;
			this.obj.style.left = actx + "px";
			this.obj.style.top = acty+ "px";
		}	
	},
	Drop : function()
	{
		this.mozgatas = false;
	}
 } 
   
var osztaly = new ProbaOsztaly();  
window.onload = function() 
{
	osztaly.Setup();  
}
window.onmousemove = osztaly.Move;
window.onmouseup = osztaly.Drop;

</script>
</head>

<body>
    <div style="background:#000; width:100px; height:100px; position:absolute;" id="negyzet">
    </div>
</body>
</html>
4

Probléma

Poetro · 2010. Feb. 9. (K), 20.46
A probléma, hogy a JavaScript eseménykezelése teljesen máshogy működik. Az egy dolog, hogy nincs olyan esemény, hogy onmousedown, hanem csak mousedown, már ha addEventListener-t nézzük. Viszont amikor a callback függvények meghívódnak, ebben az esetben a Drag, Move, Drop, akkor a this már teljesen más, jelen esetben az az objektum, aki az eseményt elszenvedi. Szóval valahogy meg kell oldanod, hogy tudd, mi az éppen mozgatott DOM elemedhez tartozó ProbaOsztaly, hogy azon tudd végrehajtani az módosításaidat.