发表于: 2020-02-19 09:20:47

0 1353


今天完成的事情

       

Callapplybind

3个都是用来改变某一个函数中this关键字指向的

Call xxx.call([this],[param]),call方法执行,首先把要操作函数中的this关键字变为call方法第一个传递的实参值,把call方法第二个及第2个以后的实参获取到.

把要操作的函数执行,并且把第二个以后传递进来的实参传递给函数,执行this

callthis的关键字this修改为第一个参数值再把this执行,非严格模式下,如果参数不传或者第一个传递的是null/undefinedTHIS都是指向window在严格模式下,第一个参数是谁,this就指向谁。

apply的作用跟call一样,也是修改操作函数的this,传参并执行函数,区别就是传参一个是分别传参,一个传的是数组。Call是分别传参,apply是传一个数组,并且apply只能传2个参数一个是this的要指向对象,一个是数组。

Bindcallapply相比区别是不会立即执行,callapply会立即执行

THIS5:基于call/apply/bind可以改变函数中this的指向(强行改变)

         *   CALL/APPLY

         *     第一个参数就是改变的THIS指向,写谁就是谁(特殊:非严格模式下,传递null/undefined指向的也是window

         *     唯一区别:执行函数,传递的参数方式有区别,call是一个个的传递,apply是把需要传递的参数放到数组中整体传递

         *     func.call([context],10,20) 

         *     func.apply([context],[10,20])

         *   BIND

         *     call/apply都是改变this的同时直接把函数执行了,而bind不是立即执行函数,属于预先改变this和传递一些内容  =>"柯理化"

         */

 

                                             

通过改变this实现字符串转换成数组,或者arguments转换成数组

重写call /apply/bind

Es5写法

重写bind

Call重写



返回列表 返回列表
评论

    分享到