登录
首页 >  文章 >  前端

为什么使用 `a.call(b)` 调用 `this.say` 时没有输出?

时间:2024-11-15 16:54:43 217浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《为什么使用 `a.call(b)` 调用 `this.say` 时没有输出?》,这篇文章主要讲到等等知识,如果你对文章相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

为什么使用 `a.call(b)` 调用 `this.say` 时没有输出?

为什么不输出?

给定代码中,定义了两个函数 a 和 b:

function a(name, age) {
  this.name = name;
  this.age = age;
  this.say = function() {
    console.log(age);
  };
}

function b() {
  this.eat = function() {
    a.call(b);
  };
}

然后创建了 b 函数的一个实例 bb,并调用其 eat 方法:

var bb = new b();
bb.eat();

但代码中存在一个问题,导致不会打印任何输出。问题在于,你试图在 a.call(b) 中调用 this.say,但 this 不是指向 a 函数的实例,而是指向 b 函数的实例。这意味着,this.say 引用的是 b 函数的实例中的方法,而不是 a 函数的实例中的方法。

因此,代码实际上是在调用 b 函数的 say 方法,而 b 函数没有这样的方法。这就是为什么代码不会打印任何输出的原因。

好了,本文到此结束,带大家了解了《为什么使用 `a.call(b)` 调用 `this.say` 时没有输出?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多文章知识!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>