一文帶你徹底弄懂JS中的bind()和this

var a = {
    b : function(){
        var func = function(){
            console.log(this);
            console.log(this.c);
        }
		console.log(this);
        func.bind(obj)();
        //這裏不僅給a的b的func綁定了一個叫做obj的對象作爲其this指針,還調用了這個函數
    },
    c : 'Hello!'
}
var obj={c:'woshiobj'}
a.b()

//結果是什麼?


在這裏插入圖片描述

關於this

一句話足矣
誰調用,誰是this,直接調用this就是window(window是所有人的爸爸你可以這麼理解)

所以 a 這個對象在調用a的b()方法時,打印的就是a自己的信息

 Object { b: b(), c: "Hello!" }

關於bind

bind()方法主要就是將函數綁定到某個對象,bind()會創建一個函數,函數體內的this對象的值會被綁定到傳入bind()第一個參數的值,例如,f.bind(obj),實際上可以理解爲obj.f(),這時,f函數體內的this自然指向的是obj

然後b由於bind了一個叫做obj的對象,所以打印如下
Object { c: "woshiobj" }

考考你,下面這個怎麼分析

var a = {
    b : function(){
        var func = function(){
            console.log(this.c);
        }.bind(this);
        func();
    },
    c : 'Hello!'
}
a.b();
var a = {
    b : function(){
        var func = function(){
        	//如果沒有外面的bind,this是調用它的b
        	//由於指明瞭this是外面的a,所以該函數負責打印‘hello’
            console.log(this.c);
        }.bind(this);
        //這裏這個this是a這個對象
        func();
    },
    c : 'Hello!'
}
a.b();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章