call、apply、bind的用法

call()方法

call() 方法可以有无数个参数
第一个参数是改变 this 指向的对象
后面的参数直接传递给函数的自身
使用后会自动执行

var a = {
  name: '张三'
}
var b = {
  name: '李四',
  sayName: function (a,b,c) {
    console.log(this.name, a+b+c)
  }
}
b.sayName.call(a, 1,2,3)//张三 6

apply()方法

apply() 方法只能由两个参数
第一个参数是改变 this 指向的对象
第二个参数必须是一个数组
使用后会自动执行

javascript
var a = {
  name: '张三'
}
var b = {
  name: '李四',
  sayName: function (a,b,c) {
    console.log(this.name, a+b+c)
  }
}
var arr=[3,5,7]
b.sayName.apply(a, arr)//张三 15

bind()方法

bind() 方法可以有无数个参数
第一个参数是改变 this 指向的对象
后面的参数直接传递给函数的自身
使用后不会自动执行,会返回一个新函数

var a = {
  name: '张三'
}
var b = {
  name: '李四',
  sayName: function (a,b,c) {
    console.log(this.name, a+b+c)
  }
}
var c=b.sayName.bind(a, 1,2,3)
c();//张三 6

共同点:

第一个参数都为改变this指向的对象
在非严格模式下,若第一参数为null/undefined,this默认指向window
在严格模式下,若第一参数为null/undefined,this默认指向undefined

猜你喜欢

转载自blog.csdn.net/weixin_40119412/article/details/104949333