apply.call.bind 都是为了改变函数运行时上下文(this指向)而存在的。
三兄弟的区别.
- 三兄弟接收的第一个参数都是 要绑定的this指向.
- apply的第二个参数是一个参数数组(obj,[a,b,c]),call和bind的第二个及之后的参数作为函数实参按顺序传入(obj,a,b,c)。
- bind不会立即调用,其他两个会立即调用。
call 实现
cxt.func 同名覆盖问题,cxt
对象上有func
,那就被覆盖了然后被删除了。
解决方案一:采用ES6
Sybmol()
独一无二的。可以本来就是模拟ES3
的方法。如果面试官不允许用呢
解决方案二:自己用Math.random()
模拟实现独一无二的key
。面试时可以直接用生成时间戳即可。
apply 实现
bind 实现