模拟实现call、apply和bind
1. 知识点补充: 首先在模拟实现前,先Mark一些我之前不知道的知识: a. eval(string)函数:可计算某个字符串,并执行其中的JavaScript代码 其中,string是必需传入的待计算或待执行的语句,并且必须是原始字符串的形式! eval(string)相当于<script> string </script> b. 类数组对象(Array-like Object) 类数组对象是一个对象,比如:arguments、DOM API返回的NodeList对象都属于类数组对象,具有指向对象元素的数组index下标和length属性,但是它们不能使用push/pop/shift/unshift等数组方法! 但是如何能 将类数组转换为真正的数组 呢?有如下方法: Array.prototype.slice.call( arguments ) // 在低版本IE下不支持 [].slice.call( arguments ) // 等同于1 let arr = Array.from( arguments ) // ES6,可将类数组对象和可遍历对象转为真正的数组 let arr = [ ...arguments ] 以下例为例演示: var foo = { value: 1 }; function bar(name, age) { console.log(this.value);