考核内容: this关键字
题发散度: ★
试题难度: ★★
解题思路:
可以参考以下说明:
前端测试题: 关于this的用法下面说法正确的是?
this 的工作原理
JavaScript 有一套完全不同于其它语言的对 this 的处理机制。在五种不同的情况下 ,this 指向的各不相同。
1.全局范围:
this;
浏览器中运行的 JavaScript 脚本,这个全局对象是 window。
2.全局函数调用:
foo();
这里 this 也会指向全局对象。
3.对象函数调用:
test.foo();
如果函数倾向于和 new 关键词一块使用,则我们称这个函数是 构造函数。在函数内部,this 指向新创建的对象。
从以上可以看出:
this 指向的并不是函数foo, 而是 c
调用的函数作为一个对象的属性出现时,this 指向的是“.”或“[”关键符号 前的那个对象
4.显式的设置 this
function foo(a, b, c) {}
var bar = {};
foo.apply(bar, [1, 2, 3]); // 数组将会被扩展,如下所示
foo.call(bar, 1, 2, 3); // 传递到foo的参数是:a = 1, b = 2, c = 3
当使用 Function.prototype 上的 call 或者 apply 方法时,函数内的 this 将会被 显式设置为函数调用的第一个参数。
因此函数调用的规则在上例中已经不适用了,在foo 函数内 this 被设置成了 bar。
5.调用某些方法时:
如:Function.prototype 上的 call 或者 apply 方法 以及 with等它指向 传入的对象。
参考代码:
百度实习生前端岗位的笔试题
/*this的作用域*/
var a = 10;
function test() {
a = 5;
alert(a);
alert(this.a);
var a;
alert(this.a);
alert(a);
}
// 执行test()和new test() 返回值分别是什么?
返回结果:
test(): 5,10,10,5
new test():5,undefined,undefined,5
第一种情况 this指拥有test的对象,这儿是windows
第二种情况this指new创建的对象,因为未定义this.a,所以undefined
答案:错误的是
C. 调用的函数作为一个对象的属性出现时,
this 指向的是当前函数对象。