Kako do konstruktora klase (this) u podfunkciji

Evo primjera…recimo

function Oblak()
	{
	this.name='oblak';
	this.img=new Image();
	this.img.src='oblak.png';
	this.img.onload=function()
		{
		alert(this.src);  //ovo radi  ..znaci ovdje this predstavlja prethodni this.img
                
                // Zelim atribute img.width i img.height prenesti na instancu klase ..kako do ovog THIS kojeg sam                   
                //označio ispod velikim slovima 
		// THIS.width=this.width;
		// THIS.height=this.height;
		
		}
        return this;
	}

Ako pitanje nije bilo jasno u komentarima koda, evo kakav bi sad poziv htio napraviti:

var oblak=new Oblak();
alert(oblak.width)    // ne zelim:  alert(oblak.img.width)

Ovdje to i nije toliko bitno, ali često me muči ovaj problem… …

P.S. ako je moguće, ja bi uklonio opciju na forumu …da ne dopušta editiranje posta ako nakon editiranja post previše sliči onom prije editiranja.

Često samo zaboravim tagirati code ili samo tako neku sitnicu…i onda forum ne dopušta editiranje posta…vjerujem da nisam jedini :smile:

Evo kako ja to radim, malo drugaciji pristup.

var Oblak = {

	init: function() {

		var that = this;

		this.img = new Image(),
		this.img.src = 'http://placehold.it/100',
		this.img.onload = function() {

			that.height = this.height;
			that.width = this.width;

		};

		return this;

	}

}

var oblak = Oblak.init();

alert( oblak.width );

Hehe …tako zapravo i ja radim samo mi se zove “This” sa velikim T. Mislio sam da ima možda neki pravilniji način. :smile:

Koliko ja znam nema, naucio sam se na taj i funkcionira, nije neki ‘hack’ tako da nema brige :slight_smile:

Ovako ja to radim:

function DropDown(el) {
this.dd = el;
this.placeHolder = this.dd.children('span');
this.opts = this.dd.find('ul.filter > li');
this.objText = '';
this.val = '';
this.index = -1;
this.filter = '';
this.initEvents();
}
DropDown.prototype = {
	initEvents: function() {
		var obj = this;
	
	obj.dd.on('click', function(event){
		$(this).toggleClass('active');
		event.stopPropagation();
	});
	
	obj.opts.on('click', function(){
		var opt = $(this);
		
		obj.objText = opt.text();
		obj.index = opt.index();
		obj.val = opt.data('val');
		obj.placeHolder.text('Filter by: ' + obj.objText)
	});
},
getValue : function() {
	return this.val;
},
getIndex : function() {
	return this.index;
},
getText : function() {
	return this.objText;
},
getFilter : function() {
	return this.filter;
}
}

i sad kad mi treba nesto kazem jednostavno

var test = new DropDown("#element");
test.getValue();

Bez “that”:

var Oblak = {
	init: function() {

		this.img = new Image(),
		this.img.src = 'http://placehold.it/100',

		this.img.onload = (function(scope){
		      return function(){
                          scope.height = this.height;
                          scope.width  = this.width;
		      };
		})(this);

        return this;
	}
}