各种上下文中的this

Posted longhua-0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了各种上下文中的this相关的知识,希望对你有一定的参考价值。

 

 

1.this关键字在何处出现?

  this他只能出现在函数中。当然在全局作用域中是个例外,意思是this只可能在两种情境下出现,一个是在函数体内,另一个是在全局作用域。

2.this是什么?

  this是关键字,语言规范里规定他指向函数执行时的当前对象。它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。

3.this到底指向哪?

  首先明确this在javascript中和函数的执行环境而不是声明环境相关。

  第一条中已经说过,this只能出现在函数中和全局作用域中,全局作用域中this指向全局对象(全局对象在浏览器这个环境中指window)。

  如果this出现在函数中,那就要分情况来看this到底指向哪了。指向的依据就是函数的执行环境而不是声明环境。其实可以以一句话来概括就是this永远指向所在函数的所有者,当没有显示的所有者的时候,那么this指向全局对象。

4.各种情况下的this的具体指向?

(1).全局作用域

console.log(this)
(2).函数作为某个对象的成员方法调用
var name = "chirenmiao1";
var obj= {
    name: "chirenmiao2",
    getName: function () {
        console.log(this.name);
    }
}
obj.getName();//chirenmiao2

  (3).函数作为函数直接使用

情况一
var name = "chirenmiao1";
var obj= {
    name: "chirenmiao2",
    getName: function () {
        console.log(this.name);
    }
}
var getName= obj.getName;
getName();   //chirenmiao1


情况二:
function myFun() {
    console.log(this);
}
myFun();

  (4).函数作为构造函数调用

var name = ‘chirenmiao1‘;
var Obj = function (x, y) {
    this.name = ‘chirenmiao2‘;
}
Obj.prototype.getName = function () {
    console.log(this.name);
}
var myObj = new Obj();
myObj.getName();//chirenmiao2

  (5).setTimeout和setInterval以及匿名函数

var name = "chirenmiao1";
var obj = {
    name: "chirenmiao2",
    getName: function () {
        setTimeout(function () {
            console.log(this.name);
        }, 1000);
    },
};
 
obj.getName();//chirenmiao1

  

(function () {
    console.log(this);
})()//window

 

  

 

 

总结:this作为函数运行时,自动生成的一个内部对象,只能在函数内部使用。具体this指向谁,要看this的所有函数是谁调用的,具体情况可分为全局作用域、作为某对象的方法调用、直接执行、匿名函数直接执行、.函数作为构造函数调用、call、apply、bind强制改变调用对象等。

 

 

http://www.cnblogs.com/wangjz1991/p/5451322.html

以上是关于各种上下文中的this的主要内容,如果未能解决你的问题,请参考以下文章

深入理解javaScript系列:各种上下文中的this

片段内 Spinner 的 Kotlin 问题

片段活动中的 ListView 适配器上下文错误,我该怎么办?

如何理解这段代码片段中的两对括号?

访问片段的上下文 [重复]

片段活动错误中的ListView Adapter上下文,我该怎么办?