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();