this指向及应用
关于js中的this指向问题:有很多同学刚接触js时,对this的指向问题很是迷惑,在有些不常见情况,往往搞不清到底指向谁。对此,我们只需记住一点:this始终指向调用它的对象。废话少说,下面直接通过不同情况下的实例来说明其指向问题。
1、对象中的方法中的this,指向调用它的对象,即 b ,所以 this.a 的输出结果是b对象中的a的值; 如果b对象中没有a,则this.a的输出结果是 undefined。
var o = { a: 10, b: { a: 12, fn: function(){ console.log(this.a); // 输出结果是 12 console.log(this); // 输出结果是 b 对象 } } } //调用 o.b.fn(); var o = { a: 10, b: { fn: function(){ console.log(this.a); // undefined console.log(this); // b对象 } } } //调用 o.b.fn();
2、改变调用方法,不直接调用:改用赋值后调用,此时this的指向为window,所以this.a的输出结果为 undefined,因为全局中没有全局变量a。
var o = { a: 10, b: { a: 12, fn: function(){ console.log(this.a); //undefined 若在对象o外定义a,则输出的就是其在外定义的值(全局变量) console.log(this); // window } } } var j = o.b.fn; //只是将b对象下的方法赋值给j,并没有调用 j(); //调用,此时绑定的对象是window,并非b对象直接调用
3、在对象方法中调用时:
var point = { x : 0, y : 0, moveTo : function(x, y) { this.x = this.x + x; this.y =