this是js的一个关键字,随着函数使用场合不同,this的值会发生变化。但是总有一个原则,那就是this指的是调用函数的那个对象。
应用情形1:如果一个函数fn中有this,这个函数又被上一级的对象所调用(obj.fn()),那么this指向的就是上一级的对象obj。
var obj = { a: 1, b: { name: 'emily', fun: function(val) { console.log(this.a,'--',val); } } }
应用情形3:如果一个函数fn中有this,但是该函数没有被上一级的对象所调用(直接调用fn()),那么this指向的就是window,这里需要特别说明的是在js的严格模式('use strict')中this指向的不是window,而是指向undefined。
obj.b.fun('this指向上一级对象b');//尽管对象b中没有属性a,这个this指向的也是对象b,因为this只会指向它的上一级对象,不管这个对象中有没有this要的东西。 var j = o.b.fun; j('指向window');
应用情形4:构造函数this,示例如下
这里之所以对象newFn可以点出函数Fn里面的user是因为new关键字可以改变this的指向,将这个this指向对象newFn,为什么说newFn是对象,因为用了new关键字就是创建一个对象实例,我们这里用变量newFn创建了一个Fn的实例,此时仅仅只是创建,并没有执行,而调用这个函数Fn的是对象newFn,那么this指向的自然是对象newFn
function Fn() { this.value = 'Fn的构造函数this'; } var newFn = new Fn(); console.log(fna);// 输出 Fn {user: "Fn构造函数this"}