当前位置: 代码迷 >> JavaScript >> 我如何找到合适的朋友? 下面是更新后的代码,它将给出确切的结果。
  详细解决方案

我如何找到合适的朋友? 下面是更新后的代码,它将给出确切的结果。

热度:70   发布时间:2023-06-05 09:35:32.0

我不知道如何找到合适的或从它中搜索我

// 作业 8:修复代码

 // Assignment 8: Fix the code var Friends = (function() { var i = 0; function Friends() { var ival = setInterval(function() { console.log(this.friends[i]); i++; if(i === this.friends.length) { clearInterval(ival); } }, 1000); } Friends.prototype.friends = ['Mikkel', 'Jens', 'Filip']; return Friends; })(); var f = new Friends(); var f2 = new Friends(); /* it should log: Mikkel Mikkel Jens Jens Filip Fili

/* 它应该记录:Mikkel Mikkel Jens Jens Filip Fili

这个代码片段有两个问题,

  1. Uncaught TypeError: Cannot read property '0' of undefined
  2. context of variable "i" is same for both instance of friends.

第一个问题是由于setInterval函数中this变量的上下文。 要访问setInterval内部的friends ,请将 this 的引用保存到setInterval外部的变量中,并在函数内部访问该变量。 在下面的代码中,我指定this一个变量me ,并访问friends使用列表me

第二个问题是使用i索引项目。 正如我们在函数Friends定义的那样,索引在两个初始化中都是相同的。 这将导致以下结果:

Mikkel
Jens
Filip
undefined
undefined
undefined ....

所以为了确保当我们调用new Friends() ,它应该从朋友列表的开头开始,在 Friends 函数中移动var i = 0的初始化。

下面是更新后的代码,它将给出确切的结果。

 var Friends = (function() { function Friends() { var i = 0; // Solution for second issue var me = this; // Solution for first issue var ival = setInterval(function() { console.log(me.friends[i]); i++; if(i === me.friends.length) { clearInterval(ival); } }, 1000); } Friends.prototype.friends = ['Mikkel', 'Jens', 'Filip']; return Friends; })(); var f = new Friends(); var f2 = new Friends();

  相关解决方案