call()、apply()

call()、apply()

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>call、apply</title>
</head>

<body>
    <script>
        var name = "xxx";
        function print(age = 1, address = "cd") {
            console.log(this.name + "," + age + "," + address); // xxx 應用默認綁定  綁定到window
        }
        print();
        var o = {
            name: "yyy"
        }
        var o2 = {
            name:"sss"
        };
        //print.call(); // xxx 應用默認綁定  綁定到window
        print.call(o, 22, "成都"); // yyy 綁定到指定對象
        print.apply(o, [23, "武漢"]); // yyy 綁定到指定對象
        print.call(o2,24,"chengtdu");
        // 相同點:指定函數的this值和參數列表並執行函數 第一個參數爲指定的this值,其餘參數爲爲函數提供的參數
        // 不同點:call()接收一個參數列表,apply()接收一個包含一個或多個參數的數組

        // 注意:如果把null、undefined作爲this綁定的對象傳入call()、apply()或bind(),
        // 這些值在調用的時候會被忽略,實際應用的是默認綁定規則
        function foo() {
            console.log(this.a);
        }
        var a = 2;
        foo.call(null); // 2
    </script>
</body>

</html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章