call的概念
1  | call() 方法在使用一个指定的 this 值和若干个指定的参数值的前提下调用某个函数或方法。  | 
例如
1  | var foo = {  | 
注意两点:
    1.call 改变了 this 的指向,指向到 foo
    2.bar 函数执行了
模拟第一版
1  | var foo = {  | 
然而添加了新的属性,所以还需删除新方法
实现结果如下
1  | // 第一版  | 
模拟最终版本
1.函数具有返回值
2.this 参数可以传 null,当为 null 的时候,视为指向 window
实现方法如下所示:
1  | Function.prototype.call2 = function (context) {  | 
同理实现apply
1  | Function.prototype.apply = function (context, arr) {  |