3 Mayıs 2017

Javascrip Fonksiyonlarında Call, Apply ve Bind

//Javascript Fonksiyonlarında Call Apply Bind

const bruce = {name:"Bruce"};

const madeline={name:"Madeline"};

function greet(){

  return `Hello I'm ${this.name}!`;

}

//this için kullanılacak nesneleri çağırmak için bruce ve madeline için call özelliğini kullanıyoruz.

console.log(greet.call(bruce));

console.log(greet.call(madeline));



function update(birthYear,occupation){

  this.birthYear=birthYear;

  this.occupation=occupation;

}



update.call(bruce,1991,'Software Developer');

update.call(madeline,1990,'Dentist');



console.log(`${bruce.name} ${bruce.birthYear} ${bruce.occupation} `);

console.log(`${madeline.name} ${madeline.birthYear} ${madeline.occupation} `);



//apply ile call farkı apply de dizi olarak yazarız call da parametre olarak yazarız

update.apply(bruce,[1980,'Specialist']);

update.apply(madeline,[1989,'Doctor']);



console.log(`${bruce.name} ${bruce.birthYear} ${bruce.occupation} `);

console.log(`${madeline.name} ${madeline.birthYear} ${madeline.occupation} `);



const newBruce=[1992,'Police'];

//apply yerine ...(üç nokta) da kullanabiliriz.

update.call(bruce,...newBruce);

console.log(`${bruce.name} ${bruce.birthYear} ${bruce.occupation} `);



const numbers=[5,3,2,4];

console.log(Math.min(...numbers));

console.log(Math.max(...numbers));



//Bind sadece bir nesne (bruce) üzerinde işlem yapmaya izin veriyor.

const updateBruce=update.bind(bruce);



updateBruce(1904,"actor");



console.log(`${bruce.name} ${bruce.birthYear} ${bruce.occupation} `);

console.log(`${madeline.name} ${madeline.birthYear} ${madeline.occupation} `);



//Madeline üzerinde değişiklik yapmama izin vermedi madeline değişmedi.

updateBruce.call(madeline,1274,'King');



console.log(`${bruce.name} ${bruce.birthYear} ${bruce.occupation} `);

console.log(`${madeline.name} ${madeline.birthYear} ${madeline.occupation} `);