Skip to content

JavaScript的this的用法

函数调用

直接调用函数时,不管调用位置如何(函数内或函数外),this都指向全局对象window。

注意:在严格模式下,这种用法是不允许,this返回值是undefined

javascript
function foo(x){
    this.x =x;
}
foo(2);
console.log(x)//2

对象调用

当函数作为对象的方法调用时,函数内的this指向当前调用对象

以下代码中this指向p对象,即当前对象,而不是window

javascript
 var n = "true";
 var p = {
     n : "false",
     m : function(){
         console.log(this.n);
     }
 }
p.m()//"false"

构造函数

在构造函数中,this指向新创建的实例对象。

以下代码,函数内部的this指向新创建的对象f

javascript
function F(x){
    this.x = x;
}
var f = new F(5);
console.log(f.x);//5

内部函数

内部函数,相当于直接调用函数所以this指向window

javascript
 var n = "true";
 var p = {
     n : "false",
     m : function(){
         var say = function(){
             console.log(this.n);
         }
         say();
     }
 }
 p.m();//true

要使用this指向p对象,代码修改如下

javascript
 var n = "true";
 var p = {
     n : "false",
     m : function(){
         var that = this;
         var say = function(){
             console.log(that.n);
         }
         say();
     }
 }
 p.m();//false