JS: Good parts - Ch.4 - Functions

apply invocation pattern

by Denise Nepraunig

JavaScript

/* 
All texts and infos I have taken from:
'JavaScript: The Good Parts' by Douglas Crockford
*/

// there are four invocation patterns:
// method invocation pattern
// function invocation pattern
// constructor invocation pattern
// apply invocation pattern

// the difference is how the hidden parameter this is handled


// >> apply invocation pattern <<
// since JS is a functional object-oriented language, 
// functions can have methods

// with apply we can provide an array of arguments 
// and the value for this

var add = function add(a, b) {
    return a + b;
};

var array = [3, 4];
var sum = add.apply(null, array); // we don't need a certain this
console.log("sum should be 7:",sum);

var statusObject = {
    status: 'A-OK'
};

var Quo = function Quo(string) {
    this.status = string;
};
Quo.prototype.getStatus = function getStatus() {
    return this.status;
};

// so let's apply the previous prototype function to
// our statusObject, which doesn't have this method
var status = Quo.prototype.getStatus.apply(statusObject);

console.log("status should be 'A-OK'", status);