我不确定如何找到合适的人或从中搜索我
//作业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
/ *它应该记录: 米克尔 米克尔 詹斯 詹斯 菲利普 菲力
答案 0 :(得分:0)
此代码段存在两个问题,
Uncaught TypeError: Cannot read property '0' of undefined
context of variable "i" is same for both instance of friends.
第一个问题是由于this
函数中变量setInterval
的上下文引起的。要访问friends
内部的setInterval
,请将其引用保存到setInterval
外部的变量中,然后在函数内部访问该变量。在下面的代码中,我为变量this
分配了me
,并使用friends
访问了me
列表。
第二个问题是使用i
为项目建立索引。正如我们在函数Friends
之外定义的那样,两个初始化的索引将相同。这将导致以下结果:
Mikkel
Jens
Filip
undefined
undefined
undefined ....
因此,要确保我们每次调用new Friends()
时都应从好友列表的开头开始,将var i = 0
的初始化移到Friends函数中。
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();