關(guān)于this的誤解:this指向函數(shù)自身
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被調(diào)用了多少次呢?
console.log(foo.count); // 0
-
foo被執(zhí)行了4次,但是foo.count仍然是0。這是因?yàn)閳?zhí)行foo.count=0時(shí),的確向函數(shù)對(duì)象foo添加了一個(gè)屬性count,但是函數(shù)內(nèi)部代碼this.count中的this并不是指向那個(gè)函數(shù)對(duì)象,所以雖然屬性名相同,根對(duì)象卻并不相同。 -
this.count++實(shí)際上創(chuàng)建了一個(gè)全局變量count,它的值為NaN。
改進(jìn)
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);