//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} `);