ES5-ES6-ES7_函数的扩展

call()/apply()/bind()的用法

Function.prototype.bind(obj) :将函数内的this绑定为obj, 并将函数返回

function foo() {
  console.log(this) // this指向window
}
foo()
let obj = {userName: 'huang'}
  function foo() {
    console.log(this) // this指向obj
    console.log(this.userName) // huang
  }
  foo.call(obj)
let obj = {userName: 'huang'}
  function foo() {
    console.log(this) // this指向obj
    console.log(this.userName) // huang
  }
  foo.apply(obj)
  let obj = {userName: 'huang'}
  function foo( ) {
    console.log(this) // this指向obj
    console.log(this.userName) // huang
    console.log(data)
  }
  foo.apply(obj, [33]) //apply传参数要用数组,第二个参数必须是数组
  foo.call(obj, 33) // 直接从第二个参数开始依次传入
let obj = {userName: 'huang'}
  function foo() {
    console.log(this) // this指向obj
    console.log(this.userName) // huang
  }
  var bar = foo.bind(obj) //绑定完this不会立刻调用当前的函数,而是将函数返回
  bar()
let obj = {userName: 'huang'}
  function foo(data) {
    console.log(this) // this指向obj
    console.log(this.userName) // huang
    console.log(data)
  }
  var bar = foo.bind(obj, 33) //绑定完this不会立刻调用当前的函数,而是将函数返回
  bar()

区别bind()与call()和apply(): 都能指定函数中的this,call()/apply()是立即调用函数,bind()是将函数返回

bind()一般在回调函数中使用,在回调函数中将this指向某个对象,然后进行操作(拿对象的属性进行对比,赋值等操作)

猜你喜欢

转载自www.cnblogs.com/LO-ME/p/10584940.html
今日推荐