ES6參考---call、apply和bind


ES6參考---call、apply和bind

一、總結

一句話總結:

bind和call與apply的區別是不會立即調用函數,常用於改變回調函數的參數,bind的參數傳遞方式和call一樣
<script type="text/javascript">
    function fun(age) {
        this.name = 'kobe';
        this.age = age;
        console.log('dddddddddddddd');
    }
    var obj = {};
    fun.bind(obj, 12)();
    console.log(obj);//{name: "kobe", age: 12}
    console.log(obj.name, obj.age);

    setTimeout(function () {
        console.log(this);//obj //{name: "kobe", age: 12}
    }.bind(obj),2000);

</script>

 

 

1、bind的參數傳遞和call已經apply里面的哪一個一樣?

bind的參數傳遞方式和call一樣

 

2、bind()常用的用途是什么?

改變回調函數的this,bind是改變對象且不立即執行,為回調函數也是不立即執行

 

3、bind()改變回調函數的this指向的實例?

調用匿名函數的bind方法直接改變this:setTimeout(function () {}.bind(obj),2000);
<script type="text/javascript">
    function fun(age) {
        this.name = 'kobe';
        this.age = age;
        console.log('dddddddddddddd');
    }
    var obj = {};
    fun.bind(obj, 12)();
    console.log(obj);//{name: "kobe", age: 12}
    console.log(obj.name, obj.age);

    setTimeout(function () {
        console.log(this);//obj //{name: "kobe", age: 12}
    }.bind(obj),2000);

</script>

 

 

4、Function.prototype.bind(obj)作用?

fn.bind(obj)將函數內的this綁定為obj, 並將函數返回
function fun(age) {
    this.name = 'kobe';
    this.age = age;
    console.log('dddddddddddddd');
}
var obj = {};
fun.bind(obj, 12)();
console.log(obj);//{name: "kobe", age: 12}
console.log(obj.name, obj.age);

 

 

 

 

二、call、apply和bind

博客對應課程的視頻位置:

 

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4   <meta charset="UTF-8">
 5   <title>05_Function擴展</title>
 6 </head>
 7 <body>
 8 <!--
 9 1. Function.prototype.bind(obj) :
10   * 作用: 將函數內的this綁定為obj, 並將函數返回
11 2. 面試題: 區別bind()與call()和apply()?
12   * 都能指定函數中的this
13   * call()/apply()是立即調用函數
14   * bind()是將函數返回
15 -->
16 <script type="text/javascript">
17     function fun(age) {
18         this.name = 'kobe';
19         this.age = age;
20         console.log('dddddddddddddd');
21     }
22     var obj = {};
23     fun.bind(obj, 12)();
24     console.log(obj);//{name: "kobe", age: 12}
25     console.log(obj.name, obj.age);
26 
27     setTimeout(function () {
28         console.log(this);//obj //{name: "kobe", age: 12}
29     }.bind(obj),2000);
30 
31 </script>
32 </body>
33 </html>

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM