JavaScript中的this

在Java等其他面向对象语言中,关键字this指向的是类的当前实例,在js中,this的值是由函数的调用上下文以及调用位置所决定的。

1. 当this用于全局上下文中:如果是在全局上下文中使用this,它就会被绑定在全局上下文。比如在浏览器中,全局上下文通常是window。对于函数来说也是如此。如果是在定义全局上下文的函数中使用this,它依然被绑定在全局上下文,因为该函数是全局上下文的一部分:

function globalAlias(){

  return this;

}

2. 当this用于对象的方法中:在这种情况下,this被赋值或绑定到包含对象上。注意,如果对象存在嵌套的话,包含对象就是那个直接的父对象。

var f = {

   name = "f",

   func:function(){

        return this;

  }

};

console.log(f.func());

//prints -

//[object object]{

//      func:function(){

//            return this;

//      },

//     name:"f"

// }

3. 如果不存在上下文:当一个函数不跟随任何对象调用的时候,就不会有上下文。默认情况下,它会被绑定到全局上下文。如果在这种函数中使用this,它就会绑定到全局上下文。

4. 当this用于构造函数中:我们之前已经看到过,当函数使用关键字new来调用时,它就会被作为构造函数使用。在构造函数中,this指向被构造的对象,在下面的例子中,f()是构造函数(因为是通过关键字new调用的),因此this指向的就是被创建出的新对象。当我们使用this.member = 'f'时,新的member属性就被添加到新创建的对象中,在这个例子中,新对象就是o:

var member = "global";

function f(){

  this.member = "f";

}

var o=new f();

console.log(o.member);

如果实例和原型中都定义了相同的属性,会优先使用实例属性。

原文地址:https://www.cnblogs.com/xiaohaodeboke/p/12166559.html