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) { |