var obj = {
first: 'Bob',
last: 'Hope',
fullName: function(){
return this.first + ' ' + this.last;
}
};
// alias the function
var unbound = obj.fullName;
assertTripleEqual(unbound(), 'undefined undefined', "without binding, function calls use the calling scope");
// bind it to the original context
// note this is an ES5 function:
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind#Browser_compatibility
var bound = unbound.bind(obj);
assertTripleEqual(typeof bound, 'function', "bind() returns a function");
assertTripleEqual(bound === unbound, false, "returns a new function");
assertTripleEqual(bound(), 'Bob Hope', "bound function will use the specified context");
assertTripleEqual(bound.call({}), 'Bob Hope', "bound function can be called in any context");