this

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

作用

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

區(qū)別:

  • bind() 最簡(jiǎn)單的用法是創(chuàng)建一個(gè)函數(shù),使這個(gè)函數(shù)不論怎么調(diào)用都有同樣的 this 值。還可以配合setTimeout使用。
  • apply()與 call()非常相似,不同之處在于提供參數(shù)的方式。就是call()方法接受的是若干個(gè)參數(shù)的列表,而apply()方法接受的是一個(gè)包含多個(gè)參數(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對(duì)象為
john{
  fistName:"john"
  sayHi:function func(){.....}
}
所以最后執(zhí)行john.sayHi()時(shí)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對(duì)象,所以第一個(gè)this為document。
setTimeout、setInterval這兩個(gè)方法執(zhí)行的函數(shù)this是全局對(duì)象所以結(jié)果為window

下面代碼輸出什么,why

var john = { 
  firstName: "John" 
}

function func() { 
  alert( this.firstName )
}
func.call(john)
call作用為調(diào)用john對(duì)象,并且傳入john對(duì)象參數(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這里有問題,因?yàn)閟howMsg函數(shù)在module對(duì)象中,與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)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容