javaScript 中this 的指向及改變this指向

函數(shù)內(nèi)this指向

this的指向是在函數(shù)調(diào)用的時(shí)候決定的,調(diào)用方式不同決定了指向不同,一般都指向調(diào)用者。

  • 普通函數(shù) 指向window,window為普通函數(shù)的調(diào)用者,window.fun();
  • 對(duì)象方法的調(diào)用指向該對(duì)象。
  • 構(gòu)造函數(shù)調(diào)用指向?qū)嵗龑?duì)象,原型對(duì)象里面的方法也指向?qū)嵗龑?duì)象
  • 事件綁定函數(shù)指向綁定事件對(duì)象
  • 定時(shí)器函數(shù)和立即執(zhí)行函數(shù) 都指向window

改變函數(shù)內(nèi)部this的指向

javaScript 提供了一些方法能改變this的指向,常用的有bind(),call(),apply()

  • call()
    call() 可以調(diào)用函數(shù),也可以改變函數(shù)this的指向
call(thisArg,age,age....)
var o = {
  name : '對(duì)象'
}
function fn (){
  
}
fn.call(o)

call()用于繼承

function Father(name,age,sex){
  this.name=name;
  this.age=age;
  this.sex=sex;
}
function Son(name,age,sex){
  father.call(this,name,age,sex)
}
var son = new Son(‘成龍’,20,'男');
  • apply()
    可以調(diào)用函數(shù),可以改變this指向
fun.apply(thisArg,[argsArray]);

thisArg,函數(shù)運(yùn)行時(shí)的this值
argsArray ,傳遞參數(shù)必須在數(shù)組內(nèi)
例子如借助數(shù)學(xué)內(nèi)置對(duì)象求最大值

var arr = [12,22,55,6,88,10,189]
var max = Math.max.apply(Math,arr);
  • bind() 方法
    不會(huì)調(diào)用函數(shù),但是能改變this指向。返回的是原函數(shù)this指向改變之后的新函數(shù)
fun.bind(thisArg,arg1,arg2....);

var o ={
  name:'中國(guó)'
}
function fn(a,b){
  console.log(this)
  console.log(a + b)
}
var newFn = fn.bind(o,2,5);
newFn();

應(yīng)用 如函數(shù)不想立即執(zhí)行,但是想改變this指向。
例子:按鈕點(diǎn)擊之后,禁用按鈕,3秒鐘之后開(kāi)啟

var btn = document.querySelector('button');
btn.onclick = function(){
  this.disabled = true;
  setTimeout(function(){
     this.disabled = false;
  }.bind(this),3000);
}
最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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