关于this的误解:this指向函数自身
function foo(num) {
console.log("foo: " + num);
this.count++;
}
foo.count = 0;
var i;
for(i=0; i<10; i++) {
if(i > 5) {
foo(i);
}
}
// foo被调用了多少次呢?
console.log(foo.count); // 0
-
foo被执行了4次,但是foo.count仍然是0。这是因为执行foo.count=0时,的确向函数对象foo添加了一个属性count,但是函数内部代码this.count中的this并不是指向那个函数对象,所以虽然属性名相同,根对象却并不相同。 -
this.count++实际上创建了一个全局变量count,它的值为NaN。
改进
function foo(num) {
console.log("foo: " + num);
this.count++;
}
foo.count = 0;
var i;
for(i=0; i<10; i++) {
if(i > 5) {
foo.call(foo, i); // 使用call改变this的指向
}
}
console.log(foo.count);
或
function foo(num) {
console.log("foo: " + num);
foo.count++;
}
foo.count = 0;
var i;
for(i=0; i<10; i++) {
if(i > 5) {
foo(i);
}
}
console.log(foo.count);












网友评论