下面我们解释什么是this关键字,是珠峰培训2014年第一期正式课第一天内容。视频也是课堂现场录的,没有经过处理和剪辑。

视频地址:http://www.zhufengpeixun.com/kecheng/detail_477800

每一个行为发生的时候,肯定会有一个发生这个行为的主体。

比如说吃饭这个方法它是由上帝来定义的,世界上所有的人来执行。吃饭这个行为发生的时候,主体就是在吃饭的这个人,也就是要有人执行吃饭这个行为。 有时候我们需要在一个行为(方法)里,能明确知道这个行为是谁来执行的,确切的说就是我要知道谁在吃饭。

function eatSomthing() {
    this.eat
}

在编程语言里面每一个定义的方法里,都会有一个this关键字,这个this关键不是由在那儿定义来决定的,而是由谁来执行决定的。这是判断this关键。

比如:这个人是张三,那么吃饭的主体就是“张三”,

张三.eat();//这个吃饭里的this就是张三这个对像。

也就是判断(.)前面的对像是谁,那这个this就是谁。 但有的方法是直接执行的,前面没有点,就更没有执行对像,那就this关键是谁呢?

像alert方法,直接执行的,那alert方法里的this是谁呢?凡是可以像alert这样直接运行的方法,都是全局方法(全局方法叫函数),全局方法的执行,都是相当于前面省略掉window.,也就是说alert()相当于window.alert(),那这样直接运行的方法里的this关键字,肯定就是window了。

*注意:方法里的this表示的是那个对像,是由谁来执行决定的。和在那儿定义的没有关系。

补充:this表示的对像,是这个方法活动的"上下文"。所谓的"上下文",也就是表示当前的这些代码的活动范围,当前的活动(代码的执行)在那个对像上的发生的意思。

吃饭这个活动,是在张三这个对像上发生的,则张三是吃饭的下下文。在body里去查找的div元素,则body是这个查找活动的上下文。那这个this,就是这个方法运行活动的范围了。

方法里this当前这个方法运行的上下文,但上下文不仅限于是this(就是整体与个体的区别)。

var innerHTML = 'outerWindow';
window.onload = function() {
    var innerHTML = 'window';
    var obj = {
        innerHTML: 'obj',
        fn: function() {
            alert(this.innerHTML);
        }
    }

    obj.fn(); //obj
    var fn = obj.fn; //window
    fn() //window省略
    //this关键字是谁,和这个方法在那个环境里执行没关系密切。和.前面的主体有关
    fn.fn(); //提示错误		
}