中山论坛建站模板,网页制作专业用语,wordpress无法上传png,泉州定制网站建设call 、bind 、 apply 这三个函数的功能都是改变this的指向问题#xff0c;但是也存在一定的区别。
call 的参数是直接放进去的#xff0c;第二第三第 n 个参数全都用逗号分隔,apply 的所有参数都必须放在一个数组里面传进去bind 除了返回是函数以外#xff0c;它 的参数和…call 、bind 、 apply 这三个函数的功能都是改变this的指向问题但是也存在一定的区别。
call 的参数是直接放进去的第二第三第 n 个参数全都用逗号分隔,apply 的所有参数都必须放在一个数组里面传进去bind 除了返回是函数以外它 的参数和 call 一样。
对比的时候以call为基准call的使用方式形如obj.say.call(objCall,YES, YES);, apply与call的区别在于传参如果有多个只能放到数组里面bind与call的区别在于并不会立即执行函数而且会返回一个新函数可延迟执行。
为了更好的理解写个小例子对比下使用
!DOCTYPE html
html langenheadmeta charsetUTF-8meta http-equivX-UA-Compatible contentIEedgemeta nameviewport contentwidthdevice-width, initial-scale1.0titleDocument/titlestylemedia print {.child {page-break-inside: avoid; }}/style
/headbodydiv classcontainer/div
/body
script// 这里面的say方法里面的this指向就是obj所以调用obj.say()// 会输出“我的名字是zzh, 平时爱阅读么YES, 平时爱运动么YES”const obj {name: zzh,age: 18,say(loveRead, loveSopot) {console.log(我的名字是${this.name}, 平时爱阅读么${loveRead}, 平时爱运动么${loveSopot});}};obj.say(YES, YES);/*** call*/// 这个时候我想使用call去改变this的指向需要怎么做呢let objCall { name: new zzh};// 将obj的say方法利用call绑定到objCall上并且立即执行函数obj.say.call(objCall,YES, YES); // 输出结果我的名字是new zzh, 平时爱阅读么YES, 平时爱运动么YES/*** apply 它与call的区别就是传参如果有多个只能使用数组而call可以单个传递*/let objApply { name: new zzh with apply};obj.say.apply(objApply,[YES,NO]); // 输出结果我的名字是new zzh with apply, 平时爱阅读么YES, 平时爱运动么NO/*** bind 它与call的区别就是返回了一个函数不会立即执行函数*/let objBind { name: new zzh with bind};// 将obj的say方法利用call绑定到objCall上并且立即执行函数let objBindNew obj.say.bind(objCall,NO, YES);objBindNew();// 输出结果我的名字是new zzh, 平时爱阅读么NO, 平时爱运动么YES/script/html