Test case details

Preparation Code

var f = function() {         return this;         };         var that = {       f: f     };         var bound = f.bind(that);         var wrappedCall = function() {         f.call(that);         };     var wrappedApply = function() {     f.apply(that);     };     var slice = Array.prototype.slice;     Function.prototype.bind2 = function(_this) {       var _self = this;       var args = slice.call(arguments, 1);       if (args.length === 0) {         return function() {           if (arguments.length === 0) return _self.call(_this);           else if (arguments.length > 0) return _self.apply(_this, args);         }       }           return function() {         if (arguments.length === 0) return _self.apply(_this, args);             var a2 = args.contact(slice.call(arguments));         return _self.apply(_this, a2);       }     }         var bound2 = f.bind2(that);         var name = 'f';

Test cases

Test #1

that.f();

Test #2

f.apply(that);

Test #3

f.call(that);

Test #4

bound();

Test #5

bound2();

Test #6

that['f']();

Test #7

that[name]();

Test #8

f();

Test #9

wrappedCall();

Test #10

wrappedApply();