You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Function.prototype.bind2=function(context){if(typeofthis!=="function"){thrownewError("Function.prototype.bind - what is trying to be bound is not callable");}varself=this;varargs=Array.prototype.slice.call(arguments,1);varfNOP=function(){};varfBound=function(){varbindArgs=Array.prototype.slice.call(arguments);returnself.apply(thisinstanceoffNOP ? this : context,args.concat(bindArgs));}fNOP.prototype=this.prototype;fBound.prototype=newfNOP();returnfBound;}
theme: juejin
思维导图
call,apply,bind 都可以改变 this 的指向
一、call 格式 [function].call([this], [param]...),一句话概括:
call()
将函数的this
指定到call()
的第一个参数值和剩余参数指定的情况下调用某个函数或方法。思考
1. 热身题1
2. 热身题 2
二、apply 和 call 基本一致
两者唯一不同的是:apply 的除了一个this指向的参数外,第二个参数是数组[arg1, arg2...],call的第二参数是列表(arg1, arg2...)
面试题
1. 模拟实现内置的 call(),apply()方法。
2. call 和 apply 区别
三、bind
this
才指定到bind
的第一个参数bind
的剩余参数,传递给新的函数小思考
1. 上面说的这个新函数是啥?
一个小栗子
2. bind 是怎么实现拷贝 fn 的?
面试题
1. bind() 和 call()、apply() 的区别
2. 模拟实现内置的 bind() 方法。
JavaScript深入之bind的模拟实现
四、思考题
1. 求数组中的最大值和最小值
2. 如何判断一个数组
3.Object.prototype.toString.call() 为什么可以用来判断类型
4.使用 call() 实现将类数组转化成数组
参考
JavaScript深入之call和apply的模拟实现
JavaScript深入之bind的模拟实现
MDN bind
结束
The text was updated successfully, but these errors were encountered: