关于一个返回值的问题

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呢??还请诸位指教!谢谢!

阅读 1.7k
2 个回答

第一个,直接修改了foo.count 的值是0,所以输出肯定是0,第二个,你foo.call(foo,3),用第一个foo去替换第二个foo,而第二个foo的属性count已经是3了,所以第二次输出是3,楼主应该是没看懂call的用法吧,解释的很口语化,纯属个人意见

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;
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题