javascript - 关于一个返回值的问题
阿神
阿神 2017-04-11 12:29:01
[JavaScript讨论组]
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呢??还请诸位指教!谢谢!

阿神
阿神

闭关修行中......

全部回复(2)
PHPz

第一个,直接修改了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;
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号