Rebusi
by Daman Daman
JavaScript
/**** CLOSURES ****/
for ( var d = 0; d < 3; d++ ) {
setTimeout(function(){
//console.log(d); // uvek 3
}, 10);
}
// resenje rebusa: tri puta podesava setTimeout
// na kraju izvrsava poslednju vrednost
for ( var d = 0; d < 3; d++ ) {
(function(d){
setTimeout(function(){
//console.log(d); // uvek razlicito
}, 100);
})(d);
}
// resenje: svaki put odmah izvrsava anonimnu funkciju
/**** OBJECT PROTOTYPES ****/
function Ninja(){
this.isukanMac = function(){
return true;
};
}
// trebalo bi da vrati false, ali ce biti pregazeno
Ninja.prototype.isukanMac = function(){
return false;
};
var ninja = new Ninja();
//console.log(ninja.isukanMac());
// objasnjenje: "Calling the instance method, not the prototype method."
function Nudist(){
this.nag = true;
}
var nudist1 = new Nudist();
var nudist2 = new Nudist();
Nudist.prototype.obuciSe = function(){
return this.nag = false;
};
//console.log( nudist1.nag);
//console.log( nudist1.obuciSe() ); // koriste metod koji je kasnije proglasen
//console.log( nudist2.obuciSe() );
//console.log( nudist1.nag);
function Kola(){
this.jure = true;
}
var kola1 = new Kola();
var kola2 = new Kola();
Kola.prototype.swing = function(){
this.jure = false;
return this; // vraca objekt i deluje retroaktivno na sve vec proglasene
};
//console.log(kola1.jure)
//console.log(kola2.jure)
var prda = (function(){
function Prda(){}
return new Prda();
})();
//var prda1 = new Prda(); // ne moze, jer je closure
var prda2 = new prda.constructor; // moze, jer nasledjuje konstruktor
console.log(prda2)