我如何找到合适的朋友?

时间:2019-02-21 12:13:12

标签: javascript

我不确定如何找到合适的人或从中搜索我

//作业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

/ *它应该记录: 米克尔 米克尔 詹斯 詹斯 菲利普 菲力

1 个答案:

答案 0 :(得分:0)

此代码段存在两个问题,

  1. Uncaught TypeError: Cannot read property '0' of undefined
  2. 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();