js基礎知識之-----this指向


生下來,活下去,如此簡單如此難!人,一生都在忙着,累着,奔波着,不論多苦,事,仍是沒作完。人,一生都在省着,攢着,儲蓄着,不論多摳,錢,仍是沒存夠。
數組


1、默認模式和嚴格模式下:bash

⑴若是在默認模式下: 函數的this指向是window

function fun(x, y) {
    console.log(this,x,y);
}
fun(10,20);// 此時打印的this是window  複製代碼

⑵若是在嚴格模式下: 函數的指向是undefined

function fun1(x, y){
    "use strict"
    console.log(this, x, y);
}
fun1(39, 13); // 此時打印的this指向是undefined複製代碼

2、使用call()
call(): 參數一是要傳的須要改變的this指向,從參數二開始就是要傳入的函數參數
注意:call函數是改變this指向,而且當即執行函數

var Obj = {
    name: "張三"
}
function fun2(x, y) {
    console.log(this, x, y);
}
fun2(20,30);// 若是這樣直接調用的話,this指向就是window
fun2.call(Obj, 30, 50); //若是使用call改變其this指向的話, 這時候this就是指向Obj了複製代碼

3、使用apply()
apply(): 參數一是要傳入的須要改變this指向,後面要傳入的是一個數組,數組裏面是函數要傳入的參數
注意:apply函數是改變this指向,而且當即執行函數

var Obj = {
    name: "張三"
}
function fun3(x, y) {
    console.log(this, x, y);
}
fun3(20,30);// 若是這樣直接調用的話,this指向就是window
fun3.apply(Obj, [100,200]); //若是使用apply改變其this指向的話, 這時候this就是指向Obj了,後面的參數時用數組封裝起來的複製代碼

4、使用bind()
bind(): 參數一是須要傳入的this指向,參數二開始日後都是函數的參數
注意: bind函數是改變this指向,可是不當即執行,是將原函數拷貝複製一份,而後返回一個全新函數,等須要的時候再調用

var Obj = {
    name: "張三"
}
function fun4(x, y) {
    console.log(this, x, y);
}
// 使用bind會複製一個函數,而後改變其this指向,並返回一個新的函數
var ss = fun4.bind(Obj);
// 這個時候再調用傳入參數
ss(10, 20);複製代碼

總結:

修改this而且當即執行:
①:函數.call(對象,arg1,arg2....)
②:函數.apply(對象,[arg1,arg2,...])
修改this不執行, 返回新函數地址之後執行
③:var ss=函數.bind(對象,arg1,arg2,....)

判斷this指向時:永遠記住這一點:判斷 this 指向誰,看執行時而非定義時,只要函數(function)沒有綁定在對象上調用,它的 this 就是 window。

相關文章
相關標籤/搜索