function Function.prototype.[[Get]](P:string)
This function is kind of a proxy that prohibits getting the caller property in strict mode.
Function.prototype.[[Get]] = function(P){
var v = this.[[Get]](P); // todo: original [[Get]] function, 8.12.3
if (P == 'caller' && v.strict) throw TypeError;
return v;
}
Note that functions returned from Function.prototype.bind use the default [[Get]] method (8.12.3).