函数的this指向是根据函数调用时所处的执行环境来确定的。
this指向对象的情况有四种:
1.使用new关键字时:this会绑定构造函数所创建的对象。
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绑定所处上下文对象。
4.默认绑定:this 在 “严格模式下为”:undefined, “非严格模式下”绑定全局对象。
function foo(){ console.log(this.name); } var foo = { name: "i'm foo!"; fun: foo } foo.foo() // 此时this绑定在foo对象;
var name = "window";
foo() //此时this默认绑定全局对象;