函數的this指向是根據函數調用時所處的執行環境來肯定的。javascript
this指向對象的狀況有四種:java
1.使用new關鍵字時:this會綁定構造函數所建立的對象。app
function Foo(){
this.a = 1;
}
var bar = new Foo(); //此時this綁定爲Foo構造函數所建立的對象。
2.使用 call, apply, bind方法調用:this 會綁定 call, apply 的第一個參數的引用對象。函數
function foo(){
console.log(this.name);
}
var a = {name : "i'm apply!"};
var b = {name : "i'm bind!"};
var c = {name : "i'm call!"};
foo.apply(a); //此時this 綁定在a對象;
foo.bind(b); //此時this 綁定在b對象;
foo.call(c); //此時this 綁定在c對象;
3.在某個上下文的對象中被調用:this綁定所處上下文對象。this
4.默認綁定:this 在 「嚴格模式下爲」:undefined, 「非嚴格模式下」綁定全局對象。spa
function foo(){ console.log(this.name); } var f = { name: "i'm foo!", foo: foo } f.foo() // 此時this綁定在foo對象;
var name = "window"; foo() //此時this默認綁定全局對象;