this

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

答:

  • this的指向:
    this是函數(shù)內(nèi)部的屬性,既可以是全局對象、也可以是當前對象或者任意對象。但總有一個原則,指的是函數(shù)調(diào)用的那個對象。
    1.在全局調(diào)用的時候指向是window。
    2.作為對象的方法調(diào)用的時候指的是那個對象。
    3.構(gòu)造函數(shù)的時候指的是構(gòu)造出來的那個對象。
    4.在事件綁定中的this,指向調(diào)用事件綁定的document對象。
    5.函數(shù)嵌套中的function的this指向window。
    6.setTimeout和setlnterval中的this指向window。
apply與call的作用:

apply、call的作用是相同的,都是指定函數(shù)的this和參數(shù)來調(diào)用函數(shù),使用apply與call可以使this的指向更為清晰。
apply與call的區(qū)別,他們的區(qū)別在于傳遞給函數(shù)的參數(shù),apply接收的是數(shù)組的形式,call接收的是多個參數(shù)。
例子:

    var name = 'hello';
    var obj = {
        name: 'jirengu',
    };
    var obj1 = {
        name:'syc'
    };

    function sayName() {
        console.log(this.name)
    }
    //全局調(diào)用, 默認指向window
    sayName()//輸出'hello'
    //作為obj的方法調(diào)用, 指向obj
    obj.sayName = sayName
    obj.sayName()//輸出'jirengu'
    //使用call指定this值
    sayName.call(obj1)//輸出'syc'

代碼:

1.以下代碼輸出什么?
var john = { 
  firstName: "John" 
}
function func() { 
  alert(this.firstName + ": hi!")
}
john.sayHi = func
john.sayHi() //輸出:John:hi!
2.下面代碼輸出什么,為什么
func() 

function func() { 
  alert(this)
}//輸出[object Window] 因為它是全局對象調(diào)用的函數(shù),所以是window
3.下面代碼輸出什么
function fn0(){
    function fn(){
        console.log(this);
    }
    fn();
}

fn0();//這里是全局調(diào)用函數(shù)所以是Window


document.addEventListener('click', function(e){
    console.log(this);//這里的this指的是addEventListener的對象,所以是document
    setTimeout(function(){
        console.log(this);
    }, 200);
}, false);//這里的setTimeout是全局調(diào)用的函數(shù)所以是window

4下面代碼輸出什么,why
    var john = {
        firstName: "John"
    }

    function func() {
        alert( this.firstName )
    }
    func.call(john)
//結(jié)果是john,因為call指向了this為john
5.代碼輸出?
var john = { 
  firstName: "John",
  surname: "Smith"
}

function func(a, b) { 
  alert( this[a] + ' ' + this[b] )
}
func.call(john, 'firstName', 'surname') 
//結(jié)果為Jhon Smith因為call指定了傳入對象為john而且它可以傳入多個參數(shù),所以結(jié)果是這個。
6.以下代碼有什么問題,如何修改
var module= {
  bind: function(){
    $btn.on('click', function(){
      console.log(this) //當btm被點擊的時候this指的btn
      this.showMsg();
    })
  },
  showMsg: function(){
    console.log('饑人谷');
  }
}
//

問題:this,showMsg()當點擊$btn時this指的是btn而不是module,所以饑人谷將無法被打印。
修改:

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

本文由作者和饑人谷所有 轉(zhuǎn)載請注明出處。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

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