ошибка объекта 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();

Привет.формат JSON.файлы.каждая из них не является функцией.. почему?

Я использую библиотеку prototype 1.7.

Если я использую это


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

У меня нет ошибки??....

3 2

3 ответа:

Возможно, вам потребуется расширить функции PrototypeJS в вашем массиве, чтобы заставить каждую функцию работать:

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

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

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

Если вы ориентируетесь только на платформы ECMAScript 5, вы захотите использовать Array.forEach.

15.4.4.18 массив.прототип.forEach (callbackfn [, thisArg ] )

callbackfn должна быть функцией, которая принимает три аргумента. forEach вызывает callbackfn один раз для каждого элемента, присутствующего в массиве, в порядке возрастания. callbackfn вызывается только для реально существующих элементов массива; он не вызывается для отсутствующих элементов массива. массив.

Если указан параметр thisArg , то он будет использоваться в качестве этого значения для каждого вызова callbackfn. Если он не предусмотрен, вместо него используетсяundefined .

callbackfn вызывается с тремя аргументами: значением элемента, индексом элемента и объектом обхода.

ForEach не мутирует непосредственно объект, на который он вызывается, но объект может быть мутирован вызовами к callbackfn .

Диапазон элементов, обрабатываемых forEach, устанавливается перед первым вызовомcallbackfn . Элементы, которые добавляются к массиву после начала вызова forEach, не будут посещаться callbackfn . Если существующие элементы массива изменены,то их значение, передаваемое в callback, будет равно значению в момент их посещения forEach; элементы, удаленные после начала вызова forEach и до посещения, не будут посещаться.

Возможно, вы можете принудительно привести его к массиву с помощью:

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

Иногда мне проще работать с хэшем вместо массива -- $H вместо $A.