javascript之this

this是js的一个关键字,随着函数使用场合不同,this的值会发生变化。但是总有一个原则,那就是this指的是调用函数的那个对象。

应用情形1:如果一个函数fn中有this,这个函数又被上一级的对象所调用(obj.fn()),那么this指向的就是上一级的对象obj。

应用情形2:如果一个函数中有this,这个函数中包含多个对象,尽管这个函数是被最外层的对象所调用,this指向的也只是它上一级的对象。

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"}

 

原文地址:https://www.cnblogs.com/emilyzz/p/14066757.html