// Explicit Binding // call, apply, bind // these methods allow you to explicitly state what the 'this' keyword is going to be in any given function // Example 1 var sayName = function(lang1, lang2, lang3) { console.log('My name is ' + this.name + ' and I know ' + lang1 + ', ' + lang2 + ', and ' + lang3); }; var stacy = { name: 'Stacy', age: 34 }; var languages = ['JavaScript', 'Ruby', 'Python']; // function.call(thisArg, arg1, arg2, ...) // .call will immediately invoke the fn sayName.call(stacy, languages[0], languages[1], languages[2]); // Example 2 var sayName = function(lang1, lang2, lang3, lang4) { console.log('My name is ' + this.name + ' and I know ' + lang1 + ', ' + lang2 + ', ' + lang3 + ', and ' + lang4); }; var stacy = { name: 'Stacy', age: 34 }; var languages = ['JavaScript', 'Ruby', 'Python']; // function.apply(thisArg, [argsArray]) // .apply will immediately invoke the fn sayName.apply(stacy, languages); // Example 3 // .bind will return a new fn that you can invoke later var newFn = sayName.bind(stacy, languages[0], languages[1], languages[2]) newFn();