如何存储传递给数组中函数的参数?

时间:2015-12-28 00:56:00

标签: javascript

我正在尝试解决以下问题,但我无法将用户传递的值存储到数组中的函数。 这是问题描述: 在这个kata中,我们将帮助Vicky跟踪她所学的单词。

编写一个函数,learnWord(word),它是Robot对象的一种方法。该函数应该报告该单词现在是否已存储,或者她是否已经知道该单词。

示例:

var vicky = new Robot();
vicky.learnWord('hello') -> 'Thank you for teaching me hello'
vicky.learnWord('abc') -> 'Thank you for teaching me abc'
vicky.learnWord('hello') -> 'I already know the word hello'
vicky.learnWord('wow!') -> 'I do not understand the input'

这是我的代码:

function Robot() {

}

Robot.prototype.learnWord = function(word) 
{
  var res;
  var ans=[];
  if(/^[a-zA-Z- ]*$/.test(word) === true)
  {
      if(ans.indexOf(word)===-1)
      {
          ans.push(word);
          res = 'Thank you for teaching me '.concat(word);
          return res;
      }
      else
      {
          res = 'I already know the word '.concat(word);
          return res;
      }
  }
  else
  {
      res='I do not understand the input';
      return res;
  }
}
var vicky = new Robot();

我希望函数应该在内存中保存已经传递的参数。

2 个答案:

答案 0 :(得分:1)

你必须取消" ans"并将来电替换为' ans'与' this.ans'。

function Robot() {
   this.ans = []; 
}

Robot.prototype.learnWord = function(word) 
{
  var res;
  if(/^[a-zA-Z- ]*$/.test(word) === true)
  {
      if(this.ans.indexOf(word)===-1)
      {
          this.ans.push(word);
          res = 'Thank you for teaching me '.concat(word);
          return res;
      }
      else
      {
          res = 'I already know the word '.concat(word);
          return res;
      }
  }
  else
  {
      res='I do not understand the input';
      return res;
  }
}

每次你做一个新的机器人();它将有自己的' ans'变量,并在原型中访问' ans'你正在使用的机器人的成员。

答案 1 :(得分:0)

如果您使用的是ECMASCRIPT 2015编译器,则可以尝试使用(...)rest参数。它们是一组适当的参数。 否则使用关键字" arguments"这是一个像对象一样的数组。它没有适当数组的所有方法,你可以通过它进行循环和.length。它存储了所有"额外的"传递给函数的参数 - 例如那些没有命名参数的人