let fn = function(x, y){
console.log(x, y)
console.log(666, this)
}
let obj1 = {name:'张三'}, obj2 = {name:'李四'}, obj3 = {name:'王五'}
let a = fn.call(obj1, 1, 2) // 自动执行,console.log(a, b) 输出 1 2 ,console.log(666, this) 输出 666 obj1 ,注意 call 后面的参数
console.log(a) // call 不返回值 输出 undefined
let b = fn.apply(obj2, [1, 2]) // 自动执行,console.log(a, b) 输出 1 2 ,console.log(666, this) 输出 666 obj2 ,注意 apple 后面的参数变化
console.log(b) // apply 不返回值 输出 undefined
let c = fn.bind(obj3, 1, 2) // 不会自动执行
console.log(c)
/* bind返回方法,输出这个方法
ƒ (a, b){
console.log(a, b)
console.log(666, this)
}
*/
c() // 执行方法得到,console.log(a, b) 输出 1 2 ,console.log(666, this) 输出 666 obj2
/*
* 总结:1、call 和 apply 都让 this 改变为 obj 了,但是绑定的时候立即执行。(返回值是undefined)
* 2、注意 call 和 apple 的传参方式不同
* 3、bind 会返回一个函数 把 fn 中的 this 预处理为 obj,此时 fn 没有执行,当点击的时候才会把 fn 执行。(会永久改变this指针)
*/
call、apply、bind三者的用法和区别
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- call、apply、bind 的用法 1. 调用方法 2. 传参方法 call、apply、bind 的区别 c...
- 相同点 bind、apply、call 都是用来绑定函数执行时this的指向(改变函数执行时的上下文),同时还可以...
- 1、call、apply、bind三个方法都有两个参数;第一个参数都是this(对象); 2、call和apply...