JavaScript中关于call函数的理解

小丶熊 2019-06-20 03:18:46

function eat(x, y) {
console.log(x + y);
console.log(this);
}

function drink(x, y) {
console.log(x - y);
console.log(this);
}

eat.call(drink, 3, 2);


输出结果为什么是


drink 中的语句一条也不会执行吗?

那为什么 this指向了drink?

还做了一些测试如下:

function eat() {
this.x = 1;
this.y = 2;
// this.z = this.x + this.y;
console.log(this.z);
}

function drink() {
this.x = 2;
this.y = 3;
this.z = this.x + this.y;

console.log(this);
}

eat.call(drink);
var d = new drink();
eat.call(d)

测试一:

测试二:


两次测试中代码区别只有eat中this.z有没有被赋值

测试结果怎么理解?
...全文
77 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
河南棒小伙 2019-06-20
  • 打赏
  • 举报
回复
说实话,进来之前我感觉我对call,apply,bind理解的还可以,但是一看你的帖子,我懵逼了,然后开始搜索了,我觉得你这篇帖子下边紧跟着的推荐的几篇文章讲的都挺好的,可以看看前两篇。
天际的海浪 2019-06-20
  • 打赏
  • 举报
回复
你需要先弄清楚 函数(构造函数)与 用 函数(构造函数)创建的实例对象的区别
天际的海浪 2019-06-20
  • 打赏
  • 举报
回复
call()的第一个参数应该是一个对象,虽然函数也是对象,但一般不会传函数,除非你明确的要把函数当一个对象使用。 函数.call(对象)的作用只是:执行函数,并且把call()第一个参数的对象赋值给函数内的this。仅此而已。

87,993

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧