// Call (borrow) an object's function from another object
// 'this' will bind to the borrower
// syntax: ownerObject.ownerFunction.call(borrowerObject)
const sidekick = {
name: "Robin"
}
const hero = {
name: "Batman",
saveGotham: function() {
console.log(this.name, "is keeping Gotham safe.");
}
}
hero.saveGotham(); // Batman is keeping Gotham safe.
hero.saveGotham.call(sidekick); // Robin is keeping Gotham safe.
myFunc.call(thisArg, ...args)
function myFunc(p1, p2, pN)
{
// here "this" will equal "myThis"
}
let myThis = {};
// call myFunc using myThis as context.
// pass params to function arguments.
myFunc.call(myThis, "param1", "param2", "paramN");
const person = {
firstName:"John",
lastName: "Doe",
fullName: function () {
return this.firstName + " " + this.lastName;
}
}
// This will return "John Doe":
person.fullName();
const personOne = {
firstName : "Elon",
secondName : "Musk"
}
const getFullName = function(company, country) {
console.log(this.firstName + " " + this.secondName + ", " + company + ", " + country);
}
const personTwo = {
firstName : "Mark",
secondName : "Zuckerburg"
}
getFullName.call(personOne, "Tesla", "United States"); // outputs Elon Musk, Tesla, United States
getFullName.call(personTwo, "Facebook", "United States"); // outputs Mark Zuckerberg, Facebook, United States
const person = {
name: "John Smith",
getNameAndAddress: function(city, country)
{
return this.name+city+country;
}
}
const personWithoutGet = {
name: "Jerry Smithers"}
console.log(person.getNameAndAddress.call(personWithoutGet, 'Berlin','Germany'));
/*you can think of bind(), apply() and call() ALL as "stealing someone else's function to use."*/
/* victimBeingStolenFrom.functionName.call(theThief) */
/*notice the second variable personWithoutGet does not have a getName function*/
l = "abcder";
q = "Ererwrwrewrew";
console.log(String.prototype.substr.call(q, 1, 4))
/*rerw...4 refers to how many characters to substring*/