function foo(num){
this.count=num;
}
foo.count=0;
alert(foo.count);//0
foo.call(foo,3);
alert(foo.count)//3;
这是一个关于返回值的问题,为啥第一个alert(...)返回0;第二个alert(...)返回是3呢??还请诸位指教!谢谢!
function foo(num){
this.count=num;
}
foo.count=0;
alert(foo.count);//0
foo.call(foo,3);
alert(foo.count)//3;
这是一个关于返回值的问题,为啥第一个alert(...)返回0;第二个alert(...)返回是3呢??还请诸位指教!谢谢!
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作thisObj。
说明白一点其实就是更改对象的内部指针,即改变对象的this指向的内容。这在面向对象的js编程过程中有时是很有用的。
运行下面代码,你会更加理解call
var a = new function (x) {
this.n = 'n';
};
function b(x) {
alert(this.n);
alert(x);
}
b.call(a, 'b');
//n
//b
而你写的这行代码
foo.call(foo,3);
其实就相当于
foo('3');
//只不过 call 把 this.count 和原本的 this.count 做了替换,其实效果都是 this.count = num;
10 回答11.6k 阅读
2 回答3.1k 阅读✓ 已解决
3 回答2.7k 阅读✓ 已解决
4 回答2.1k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
3 回答782 阅读✓ 已解决
第一个,直接修改了foo.count 的值是0,所以输出肯定是0,第二个,你foo.call(foo,3),用第一个foo去替换第二个foo,而第二个foo的属性count已经是3了,所以第二次输出是3,楼主应该是没看懂call的用法吧,解释的很口语化,纯属个人意见