问题描述
我不知道如何找到合适的或从它中搜索我
// 作业 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楼
Dipak
0
2019-03-20 05:24:26
这个代码片段有两个问题,
-
Uncaught TypeError: Cannot read property '0' of undefined
-
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();