this

apply、call 、bind有什么作用,什么區(qū)別

作用

  • bind是返回一個新函數(shù),并且使函數(shù)內(nèi)部的this為傳入的第一個參數(shù)。
  • 而apply和call是調(diào)用一個函數(shù),傳入函數(shù)執(zhí)行上下文及參數(shù)

區(qū)別:

  • bind() 最簡單的用法是創(chuàng)建一個函數(shù),使這個函數(shù)不論怎么調(diào)用都有同樣的 this 值。還可以配合setTimeout使用。
  • apply()與 call()非常相似,不同之處在于提供參數(shù)的方式。就是call()方法接受的是若干個參數(shù)的列表,而apply()方法接受的是一個包含多個參數(shù)的數(shù)組。
function joinstr(){
          console.log( [].join.call(arguments,'-')) //a-b-c
          var join=[].join.bind(arguments)
          console.log(join('-'))//a-b-c
        }
        joinstr('a','b','c')

以下代碼輸出什么?

var john = { 
  firstName: "John" 
}
function func() { 
  alert(this.firstName + ": hi!")
}
john.sayHi = func
john.sayHi()
輸出結(jié)果為join:hi!
john.sayHi = func執(zhí)行完后,join對象為
john{
  fistName:"john"
  sayHi:function func(){.....}
}
所以最后執(zhí)行john.sayHi()時this.firstName指的是john.firstName值為john

下面代碼輸出什么,為什么

func() 
function func() { 
  alert(this)
}
func函數(shù)中的this為全局作用域中的this為window

下面代碼輸出什么

document.addEventListener('click', function(e){
    console.log(this);
    setTimeout(function(){
        console.log(this);
    }, 200);
}, false);
在事件處理程序中this代表事件源DOM對象,所以第一個this為document。
setTimeout、setInterval這兩個方法執(zhí)行的函數(shù)this是全局對象所以結(jié)果為window

下面代碼輸出什么,why

var john = { 
  firstName: "John" 
}

function func() { 
  alert( this.firstName )
}
func.call(john)
call作用為調(diào)用john對象,并且傳入john對象參數(shù),所以alert中的this為john,最終結(jié)果為john

以下代碼有什么問題,如何修改

var module= {
  bind: function(){
    $btn.on('click', function(){
      console.log(this) //this指什么
      this.showMsg();
    })
  },
  
  showMsg: function(){
    console.log('饑人谷');
  }
}

此代碼中$btn事件中的this指的是$btnDOM元素,所以this.showMsg這里有問題,因為showMsg函數(shù)在module對象中,與this所指的$btn并無關(guān)聯(lián),修改結(jié)果如下

var module= {
  bind: function(){
    var self=this    //將這里的this   module保存為self
    $btn.on('click', function(){
      console.log(this) //this指什么
      self.showMsg();   
    })
  },
  
  showMsg: function(){
    console.log('饑人谷');
  }
}

或者

      var module= {
 bind: function(){
    $btn.on('click', function(){
     console.log(this) //this指什么
     this.showMsg();
   }.bind(this))
 },

 showMsg: function(){
   console.log('饑人谷');
 }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容

  • 1. apply、call 、bind有什么作用,什么區(qū)別? call ,apply的作用:調(diào)用一個函數(shù),傳入函數(shù)...
    Rising_suns閱讀 403評論 0 0
  • apply、call 、bind有什么作用,什么區(qū)別 apply:fn.apply( obj,])將fn函數(shù)里的t...
    邵志遠閱讀 549評論 0 0
  • apply、call 有什么作用,什么區(qū)別 使用call和apply方法,可以改變對象方法的運行環(huán)境。 call ...
    coolheadedY閱讀 355評論 0 0
  • 作業(yè) this 相關(guān)問題 問題1: apply、call 有什么作用,什么區(qū)別apply()和call()函數(shù)都可...
    饑人谷_桶飯閱讀 402評論 0 0
  • this 相關(guān)問題 apply、call 、bind有什么作用,什么區(qū)別這三個方法均可以改變調(diào)用函數(shù)的this指向...
    放風箏的小小馬閱讀 385評論 0 1