下面我们解释什么是this关键字,是珠峰培训2017年正式课内容。视频也是课堂现场录的,没有经过处理和剪辑。
JavaScript面试题视频地址:https://pan.baidu.com/s/1c1FvxUo
每一个行为发生的时候,肯定会有一个发生这个行为的主体。
比如说吃饭这个方法它是由上帝来定义的,世界上所有的人来执行。吃饭这个行为发生的时候,主体就是在吃饭的这个人,也就是要有人执行吃饭这个行为。 有时候我们需要在一个行为(方法)里,能明确知道这个行为是谁来执行的,确切的说就是我要知道谁在吃饭。
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(); //提示错误 }