JavaScript关于call、apply、bind的用法

发布于:2023-01-19 ⋅ 阅读:(219) ⋅ 点赞:(0)

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

call()和apply()都是可以用来重新定义函数的执行环境,也就是this的指向性,他们的参数形式不同,call可以是多个参数,apply参数是数组。


网站公告

今日签到

点亮在社区的每一天
去签到