博主信息
sodesily
博文
3
粉絲
0
評論
0
訪問量
407
積分:0
P豆:6

改變JS中的this指向的方法

2019年11月12日 09:02:09閱讀數:157博客 / sodesily / web前段

JS的this指向

正常函數的this指向

1.全局調用  函數名( )   指向 window
2.對象調用   對象.函數名( )    誰調用指向誰  (.前面是誰就指向誰)
3.自執行的函數  指向window
4.事件處理函數   指向事件源
5.定時器處理函數   指向事件源
6.函數定義了未調用的時候指向不確定

強行改變this指向的方法

call( )

    語法:
     函數名.call(你要改變的函數的 this 指向, 第二個參數開始,依次是給函數傳遞的參數)
    會直接把函數給調用
    第一個參數如果不寫或者寫一個 null,表示 window
    let a = 10;
    function fn(b) {
        console.log(this);
        console.log(b);
    }
    fn.call(a,"gg");  //Number {10}  直接調用

apply()

    語法:
     函數名.apply(你要改變的函數的 this 指向,第二個參數是一個數組(只能有倆個參數)
    數組里面每一項依次是給函數傳遞參數)
    會直接把函數給調用
let a = 10;
    function fn(b,c) {
        console.log(this);
        console.log(b);
        console.log(c);
    }
    fn.apply(a,["bb","cc"]);  //Number {10}   直接調用

call ( ) 和 apply ( ) 的方法實際上功能是一樣的,只是傳入的參數列表形式不同。

bind()

語法:
函數名.bind(你要改變的函數的 this 指向)
不會立即執行函數
返回值: 就是一個函數(只不過是一個被改變好了 this 指向的函數)
他對函數的參數傳遞有兩個方式
1. 調用返回的函數的時候傳遞
2. 直接從第二個參數開始依次傳遞

let a = 10;
    function fn(b,c) {
        console.log(this);
        console.log(b);
        console.log(c);
    }
    var fn1=fn.bind(a,"bb","cc");  //返回的是改好指向的函數 并沒有調用
    fn();  //  window   原來函數的指向是不會改變的
    fn1();   //Number {10}  
                                   

全部評論

文明上網理性發言,請遵守新聞評論服務協議

條評論
暫無評論暫無評論!
  • 澳洲幸运8在哪里开奖