2013-08-18 2 views
0

У меня есть некоторые настройки данных JSON в структуре, аналогичной приведенной ниже в Data.prototype.DAYSASTEXTДоступ к JSON постоянны в дате прототипа

Я хочу, чтобы получить доступ к этому внутри функции я использую, чтобы продлить Date() способ.

Вот код: -

Date.prototype.DAYSSASTEXT = { "hours": [ 
    { "0": "Sunday" }, 
    { "3": "Wednesday" } 
    ] 
}; 

Date.prototype.getHourName = function() { 
    // Edited 
    return this.DAYSSASTEXT.hours[0][this.getDay()]; 
}; 


var example_date = new Date(2008, 1, 20); 

document.getElementById("debug").innerHTML = example_date.getHourName(); 

Где я буду неправильно? дата, установленная в example_date, должна вернуть 3 в среду.

Edit: Если изменить день на дату, которая является воскресенье она возвращает правильное значение, но в среду (день 3, когда, начиная с 0), он возвращает неопределенное

+0

В приведенном коде нет данных JSON. Литералы объектов и массивов не JSON. – nnnnnn

+0

Структура действительна JSON, я не включил файл данных, потому что он слишком длинный. – KryptoniteDove

+0

Что я говорю, так это то, что структура не является JSON вообще. JSON является представлением _string_ (где содержимое строки имеет примерно тот же формат, что и литерал объекта JS или литерал массива), и его необходимо проанализировать для использования в качестве объекта так, как его использует функция 'getHoursName()'. (Я просто возражаю против терминологии применительно к показанному коду.) – nnnnnn

ответ

1

'Expected an identifier and instead saw "["

Вы должны использовать либо dot or bracket notation для членов Гости могут воспользоваться, не так:

this.DAYSSASTEXT.hours[0][this.getDay()]; 
//      ^no dot! 

Кроме того, ваша структура кажется неправильной. Мало того, что у вас есть имена в будние дни в свойстве hours, но у вас также есть объекты с одним объектом в массиве. Я хотел бы предложить использовать либо один большой объект, или даже сделать этот объект массива:

Date.prototype.DAYSSASTEXT = { 
    "hours": { 
     "0": "Sunday", 
     "3": "Wednesday" 
    } 
}; 
// or 
Date.prototype.DAYSSASTEXT = { 
    "hours": ["Sunday", , , "Wednesday"] 
}; 

затем получить доступ к нему без индекса массива 0:

this.DAYSSASTEXT.hours[this.getDay()]; 

Если вы действительно необходимо, что упаковка для массива по какой-то причине вам по крайней мере нужно поставить Sunday и Wednesday на том же объекте.

+0

Если я не могу изменить структуру файла JSON Что ты предлагаешь? игнорируйте часовую опору, поскольку я добавил, что сделать структуру такой же. – KryptoniteDove

+0

Почему вы не можете изменить его? В настоящее время он не используется. Если вы не можете изменить литерал кода, вам, по крайней мере, придется добавить код, который преобразует его в формат выше. – Bergi

+0

Я могу изменить структуру файла JSON, но не уверен, как это сделать, это мой второй день с JSON. Все конфиги требуются в одном файле, например, все дни недели, часы как текст и т. Д. В одном структурированный файл, который я могу загрузить и установить как константы для метода Date, который будет использоваться, когда это необходимо. Я имел их как отдельные объекты, потому что я думал, что смогу соответствовать 0 и вернуться в воскресенье таким образом. – KryptoniteDove