#每天一个知识点# day17
js中call、apply、bind的区别
都是用来改变某一个函数中THIS关键字指向的
用法:
call
[fn].call([this],[param]...)
fn.call:当前实例(函数FN)通过原型链的查找机制,找到Function.prototype上的call方法 =>function call(){[native code]}
fn.call():把找到的call方法执行
当call方法执行的时候,内部处理机制
1.首先把要操作函数中的THIS关键字变为CALL方法第一个传递的实参值
2.把CALL方法第二个及第二个以后的实参获取到
3.把要操作的函数执行,并且把第二个以后的传递进来的实参传给函数
apply
和call基本上一模一样,唯一区别在于传参方式
fn.call(obj,10,20)
fn.apply(obj,[10,20]) APPLY把需要传递给FN的参数放到一个数组(或者类数组)中传递进去,虽然写的是一个数组,但是也相当于给FN一个个的传递
bind
语法和call一模一样,唯一的区别在于立即执行还是等待执行
fn.call(obj,10,20) 改变FN中的THIS,并且把FN立即执行
fn.bind(obj,10,20) 改变FN中的THIS,此时的FN并没有执行(不兼容IE6~8)
js中call、apply、bind的区别
都是用来改变某一个函数中THIS关键字指向的
用法:
call
[fn].call([this],[param]...)
fn.call:当前实例(函数FN)通过原型链的查找机制,找到Function.prototype上的call方法 =>function call(){[native code]}
fn.call():把找到的call方法执行
当call方法执行的时候,内部处理机制
1.首先把要操作函数中的THIS关键字变为CALL方法第一个传递的实参值
2.把CALL方法第二个及第二个以后的实参获取到
3.把要操作的函数执行,并且把第二个以后的传递进来的实参传给函数
apply
和call基本上一模一样,唯一区别在于传参方式
fn.call(obj,10,20)
fn.apply(obj,[10,20]) APPLY把需要传递给FN的参数放到一个数组(或者类数组)中传递进去,虽然写的是一个数组,但是也相当于给FN一个个的传递
bind
语法和call一模一样,唯一的区别在于立即执行还是等待执行
fn.call(obj,10,20) 改变FN中的THIS,并且把FN立即执行
fn.bind(obj,10,20) 改变FN中的THIS,此时的FN并没有执行(不兼容IE6~8)
展开
评论
点赞