ugrás a tartalomhoz

Hogyan tudom meg egy objektum nevét?

s_volenszki · 2008. Aug. 26. (K), 12.19
Sziasztok!

Az a kérdésem, ha van egy "valami" konstruktorom és annak egy "akarmi" objektuma:

function valami(){
   
}
akarmi = new valami();
akkor a konstruktorban hogyan tudom kideríteni, hogy mi lett az objektum neve?

s_volenszki
 
1

A létrehozott objektumok elérése.

s_volenszki · 2008. Aug. 26. (K), 12.42
Az a kérdés is felmerült bennem, hogy hogyan tudom meg, hány darab és milyen nevű objektum van létrehozva egy konstruktoból?
4

kontnéner

toxin · 2008. Aug. 26. (K), 13.07
csinálsz neki egy konténerobjektumot benne egy tömb tagváltozót és beledobálod őket, név ekkor már nem kell

	var FooContainer = {				
				_container : [],				
				addElem : function(_obj){
					this._container.push(_obj);
				},
				getLength : function(){
					return this._container.length;
				},
				iterate : function(_func){
					for(var i=0;i<this._container.length;i++){
						_func(this._container[i]);
					}
				}
			};
			
			var FooClass = function(_fooBar){
				this._fooBar = _fooBar;
			};
			
			FooContainer.addElem(new FooClass(1));
			FooContainer.addElem(new FooClass(2));
			FooContainer.addElem(new FooClass(3));
			console.log(FooContainer.getLength()) // 3;
			FooContainer.iterate(function(_fooObj){
				console.log(_fooObj._fooBar)
			}); // 1,2,3
			
üdv Csaba
2

this

toxin · 2008. Aug. 26. (K), 12.53

function valami(){  
   this.foo = "foo"  
}  
akarmi = new valami(); 
ha nem a this akkor nemértem :)

üdv Csaba
3

Az lehet...

s_volenszki · 2008. Aug. 26. (K), 13.02
Az lehet, de a this-re azt mondja [object Object].

Nekem arra lenne szükségem, hogy a létrehozott objektum nevét megszerezhessem a konstruktorban. Tudom, hogy hülyeség de valami olyasmi, hogy this.ObjName és az = lenne az "akarmi"-vel.

Köszi, hogy segítesz!
5

[object Object].

toxin · 2008. Aug. 26. (K), 13.14
mi mondja ezt, kicsit a problémáról isirjál

üdv Csaba
6

Dialógus

s_volenszki · 2008. Aug. 26. (K), 13.38
Nagyon új vagyok a oop-ben, talán két hete kezdtem szakirodalmat olvasgatni. Úgy döntöttem, most már valami minta alkalmazáson keresztül el kezdem megtapsztalni az előnyöket.

Elhatároztam, hogy csinálok egy olyan konstruktort, ami dinamikous ablakot hoz létre a DOM-ban.

function Dialog(paramtereke...){
   this.Open = function(){
      dialogId = 'ablak';
      $("body").append('<div id="' + dialogId  + '"><input type="button" value="Bezár" onclick="this.Close();"></div>');
   }
   this.Close = function(){
      ...
   }
   ....
}

function Udvozold(paramtereke....){
   Udvozles = new Dialog(paramtereke....);
   Udvozles.Open();
}
Nagyjából úgy néz ki, hogy egy gombnyomásra lefut az Udvozold(); függvény, de a bezárás gombnál nem érti a this-t! Ha viszont teszek egy másik gombot a dokumentumban akárhova az Udvozles.Close(); paranccsal, az bezárrja.

Ezért kellene tudnom a konstruktorban, hogy mi annak a példányka a neve.
7

a this-t kell megtanulni kezelni

rrd · 2008. Aug. 26. (K), 13.51
http://weblabor.hu/cikkek/oojsafelszinfolott (Objektumok, metódusok és a this)
http://webmania.cc/prototype-mintadarabok-3/

Másrészt ha most kezdesz oo-t tanulni Js-sel akkor jobban jársz ha először megismerkedsz egy JS keretrendszerrel, mert ezek sok sok ilyen feladat megoldását sokkal egyszerűbbé teszik.
8

Ismerek (használok) néhányat...

s_volenszki · 2008. Aug. 26. (K), 14.33
Szia!

Köszönöm a hozzászólásodat. Igen, ismerek és használok is néhányat (a $("body").append(); is jQuery-s), de úgy érzem eljutottam odáig, hogy most már az, hogy működik nem tölt el megelégedéssel, most azt akarom megérteni, hogy is működik!

s_volenszki
9

konkrét kérdés passz

toxin · 2008. Aug. 26. (K), 15.23
kicsit dolgozni is kellett, inline js-ben passzolnám, hogy lehet elérni az eredeti objektumot, maradt a kerülő út

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <title>Untitled Document</title>       
        <script type="text/javascript">
        	
function $(_id){ return document.getElementById(_id); };

function Dialog(_params){
	this._params = _params;
	Dialog.open(_params.dialogId);
};

Dialog.prototype.getId = function(){
	return this._params.dialogId;
};

Dialog.open = function(_id){				
	$("wrapper").innerHTML += '<div id="' + _id  + '"><input type="button" onclick="Dialog.close(\''+ _id +'\')"value="Bezár"></div>';				
};			
Dialog.close = function(_target){
	var id = typeof _target == "string" ? _target : _target.getId(); 
	$(id).parentNode.removeChild($(id));
}; 

window.onload = function(){
	new Dialog({dialogId : "_1"});
	new Dialog({dialogId : "_2"});
	new Dialog({dialogId : "_3"});
	
	Udvozles = new Dialog({dialogId : "_4"});
	setTimeout(function(){
		Dialog.close(Udvozles)
	},2000);
};
        </script>
    </head>
    <body>
    	<div id="wrapper"></div>
    </body>
</html>
open,close-t felvettem statikus metódusnak, a Dialog.close kaphatja a paramétereket id-ben is Dialog objektumban is, ellenőrzést hozzá kéne adni, így már viszonylag barátságosan, bár kerülővel, megoldható a feladat, sry de legalább gyártottam valamit, tanulni ebből is lehet :)

üdv Csaba
10

Hálás köszönet!

s_volenszki · 2008. Aug. 26. (K), 15.35
Hálásan köszönöm a segítséget, áttanulmányozom tüzetesen!

s_volenszki