this
的工作原理javaScript 有一套完全不同于其它语言的对this
的处理机制。 在五种不同的情况下 ,this
指向的各不相同。
this;
当在全部范围内使用this
,它将会指向全局对象window。
foo();
这里this
也会指向全局对象window。
ES5 注意:在严格模式下(strict mode),不存在全局变量。 这种情况下this
将会是undefined
。
test.foo();
这个例子中,this
指向test
对象。
new foo();
如果函数倾向于和new
关键词一块使用,则我们称这个函数是构造函数。 在函数内部,this
指向新创建的对象。
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
。第五种也是常见的call和apply用法的基本功能。
经常会遇到,却经常出错,总结一下,偶尔温故使用。
新闻热点
疑难解答