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...