当函数期望没有Javascript时访问参数

时间:2014-12-16 22:51:02

标签: javascript oop parameters

我正在编写一个Javascript函数来计算未排序数组中元素的实例数。它有像这样的方法签名

Array.prototype.numberOfOccurrences = function() { 

}

以下是预期行为的示例

var arr = [4, 0, 4];
Test.assertEquals(arr.numberOfOccurrences(4), 2);

我的问题是我不知道如何访问数组中的元素。该函数不接受任何参数,那么如何引用传入的数组?

注意:对于代码大战中的kata,说明并不具有描述性,并且向函数添加参数会返回一些错误意外的令牌。

3 个答案:

答案 0 :(得分:2)

在您创建的Array.prototype函数中,您可以通过“this”关键字访问所有原型函数。

这意味着您可以使用数字属性(如[0]或此[1])访问数组项,以分别访问第一个和第二个项目。

您还可以调用允许您遍历数组上每个项目的函数,例如:forEach,filter等。

请参阅此页面以查看您可以使用阵列原型执行的所有操作: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype

最后不要忘记每个浏览器的JavaScript实现都有所不同,因此适用于Chrome的功能可能无法在InternetExplorer上运行,请始终在caniuse.com上确认如果您使用的功能在目标上具有相同的实现浏览器。

干杯。

答案 1 :(得分:1)

是否应该将javascript基础对象放在一边,this是你的朋友:

Array.prototype.numberOfOccurrences = function(valueToFind) { 
    return this.filter(function(item) {
        return item === valueToFind;
    }).length;
}
var a = [1,2,3,3,3,3];
console.log(a.numberOfOccurrences(3)); //4

如上所述,如果您因任何原因无法更改功能签名,可以按如下方式指定:

Array.prototype.numberOfOccurrences = function() { 
    var valueToFind = arguments[0];
...
}

为了清楚起见,我建议将参数添加到函数中。对于像numberOfOccurences这样的函数来说,似乎没有直观的反对意见来接受参数 - numberOfOccurences的什么?

小提琴http://jsfiddle.net/KyleMuir/g82b3f98/

答案 2 :(得分:0)

您可以尝试在函数内部使用本地可用的变量'arguments'。例如,您的代码可能看起来像是:

Array.prototype.numberOfOccurrences = function() { 
  var args = arguments || {};
  var testArray, testCheck;
  if (args[0] && Array.isArray(args[0]) {
    // do something with the array that was the first argument, like:
    testArray = args[0];
    testCheck = testArray.indexOf(args[1]);
    return testCheck;
  } else {
    // do what you want to do if the function doesn't receive any arguments or the first argument
    // received isn't an array.
  }
}
在声明的函数中,

'arguments'始终可用。