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)