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文档 - 我不知道如何做到这一点。
这可能吗?
特别是,我对以下内容感兴趣:
答案 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);