javascript 对象错误
这是我的情况:
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":""});
我没有错误?....
您可能需要扩展数组上的 PrototypeJS 函数以使每个函数正常工作:
$A(this.json.files).each(function(x) {
...
}
如果您仅针对 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 的调用开始后且在被访问之前被删除的元素不会被访问。
也许你可以强制将其转换为数组:
$A(this.json.files).each(...
有时我发现使用哈希而不是数组更容易 -
$H
而不是
$A
。