开发者问题收集

javascript 对象错误

2010-12-14
211

这是我的情况:



var r = {"id":"test","files":[],"code":""};


var Page = Class.create({


 initialize: function(json) {
  this.id = json.id;
  this.json = json;

 },
        start: function() {
  this.json.files.each(function(x) {
   var cssResource = this.pageResource(x, 'css');
   this.attachCssResource(cssResource);

  }.bind(this));
        },

//etc....

});

var P = new Page(r);
P.start();

嗨,this.json.files.each 不是一个函数..为什么?

我使用原型 1.7 库。

如果我使用这个


var P = new Page({"id":"test","files":[],"code":""});

我没有错误?....

3个回答

您可能需要扩展数组上的 PrototypeJS 函数以使每个函数正常工作:

$A(this.json.files).each(function(x) {
   ...
}

http://www.prototypejs.org/api/utility/dollar-a

http://www.prototypejs.org/api/element/extend

wajiw
2010-12-14

如果您仅针对 ECMAScript 5 平台,则需要使用 Array.forEach

15.4.4.18 Array.prototype.forEach (callbackfn [, thisArg ])

callbackfn 应该是一个接受三个参数的函数。forEach 对数组中存在的每个元素按升序调用 callbackfn 一次。仅对实际存在的数组元素调用 callbackfn ;不会对数组中缺失的元素调用它。

如果提供了 thisArg 参数,它将用作每次调用 callbackfn 的 this 值。如果未提供,则使用 undefined

callbackfn 使用三个参数调用:元素的值、元素的索引和正在遍历的对象。

forEach 不会直接改变调用它的对象,但对象可能会因对 callbackfn 的调用而改变。

forEach 处理的元素范围在第一次调用 callbackfn 之前设置。在对 forEach 的调用开始后附加到数组的元素将不会被 callbackfn 访问。如果数组的现有元素发生更改,则传递给回调的值将是 forEach 访问它们时的值;在对 forEach 的调用开始后且在被访问之前被删除的元素不会被访问。

ChaosPandion
2010-12-14

也许你可以强制将其转换为数组:

$A(this.json.files).each(...

有时我发现使用哈希而不是数组更容易 - $H 而不是 $A

clockworkgeek
2010-12-14