javascript - 关于call的一个疑问
伊谢尔伦
伊谢尔伦 2017-04-10 14:36:02
[JavaScript讨论组]
function f1() {    
console.log(this);    
console.log(1);
}
function f2() {    
console.log(this);    
console.log(2)
}
f1.call.call(f2);  //Window,2

输出的结果看不懂求大神帮忙

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(1)
迷茫

首先,call 是一个内部定义的 Function 对象,f1.callf2.call 都是一样的,是 Function.prototype.call,这个很容易证明,只需要试验一下代码就行

f1.call === f2.call
f1.call === Function.prototype.call
// 上面两句都返回 true

然后呢 f1.call 也是一个 Function 对象,所以 f1.callf1.call.call 应该也是同一个东东,试验下

f1.call.call === f1.call
// 结果是 true

f1.call.call(f2) 是把 f2 作为 this 对象调用了 Function.prototype.call,也就相当于是调用了 f2.call()

call 的第 1 个参数是 nullundefined 的时候 this 被设置为 global 对象,在浏览器里就是 window

这个参考 ECMAScript Language Specification (ECMA-262) 的第 13.4.3 的第 2 条

所以最后结果就是你看到的那样了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

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