在jQuery中枚举JS数组

时间:2010-06-25 23:41:46

标签: javascript jquery prototype

OK jQuery专家:所以..我来自Prototype背景。

我一直在做以下代码(或一些类似的变化):

MyObject.prototype.someFunction = function()
{
  var myArray = ["a","b","c"];
  myArray.each(function(arrayEntry)
    {
      this.printPart(arrayEntry);
    }, this);
}

MyObject.prototype.printPart = function(part)
{
  console.log(part);
}

我正在浏览jQuery文档 - 我不知道如何做到这一点。

这可能吗?

特别是,我对以下内容感兴趣:

  • 通过javascript数组迭代(对象也会很好)。
  • 维持范围。注意每个函数的最终“this”参数。

2 个答案:

答案 0 :(得分:5)

您正在寻找$.each(array, function(i, element) { ... })

它也处理对象,在这种情况下,你在参数中得到(key, value)

编辑 - 遗憾的是没有Prototype的inject,我真的非常想念它。但是jQuery中有map,它与Prototype中的collect类似。

再次编辑 - 正如@Nick在评论中指出的那样,Prototype和jQuery对于处理“this”的最佳方式存在分歧。通常,jQuery调用“handler”函数,其中“this”指向明显的相关对象。原型是更加放手的。

答案 1 :(得分:1)

你不一定要在jQuery中做所有事情。只需添加一个forEach方法(如果它尚不存在),然后使用它。 ECMAScript第5版非常好。采用它作为标准(受Prototype的每种方法的启发),但并非所有的浏览器都有它:)。这是规范的一个实现,您可以使用它直到所有浏览器都本机地拥有它(taken from MDC):

修改:Chrome,Safari,Firefox和Opera的最新版本已经支持此功能。没有IE访问,抱歉。

if (!Array.prototype.forEach)
{
  Array.prototype.forEach = function(fun /*, thisp*/)
  {
    var len = this.length >>> 0;
    if (typeof fun != "function")
      throw new TypeError();

    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in this)
        fun.call(thisp, this[i], i, this);
    }
  };
}

然后按原样使用您的代码(将each更改为forEach):

var myArray = ["a","b","c"];

myArray.forEach(function(arrayEntry) {
    this.printPart(arrayEntry);
}, this);