2011-01-21 3 views
1

Я немного нуб, когда дело доходит до этого. Я использую JSON для определения класса/объекта с именем product, и я не уверен, как передать аргументы для доступа к определенной части этого объекта. Простите меня за то, что я не смог объяснить это лучше. Надеюсь, мой пример кода поможет:Как получить доступ к определенному объекту в javascript?

var product = { 
    p14lb: { 
     one: 10.00, 
     two: 20.00, 
     three: 30.00, 
     four: 40.00, 
     five: 50.00, 
     six: 60.00, 
     colorCharge: 2.00 
    }, 
    p20lb: { 
     one: 20.00, 
     two: 30.00, 
     three: 40.00, 
     four: 50.00, 
     five: 60.00, 
     six: 70.00, 
     colorCharge: 1.00 
    }, 
    getPrice: function (productQty,colorQty) { 

     // I can get the values like this   
     return this.p20lb.one * productQty; 

     // but i'd like to be able to pass in the value of what object I want to access 
     // so instead of hard coding p20lb.one, 'p20lb' would be an argument I could pass 
     // to getPrice, and 'one' would also be an argument 

    } 
}; 

Вот как я к нему обращаюсь в настоящее время, отлично работает.

var myProduct = product.getPrice(144,2); 

Как я уже сказал в комментарии в приведенном выше примере кода, я хотел бы не жесткий код p20lb.one «p20lb» был бы аргумент, который я мог бы перейти к getPrice, и «один» также будет аргументом. Так что, возможно, что-то вроде этого:

getPrice: function (productQty,colorQty,productName,tier) { 

    return this.productName.tier * productQty; 

} 

var myProduct = product.getPrice(144,2,'14lb','two'); 

Но это не идти, я не получаю undefined независимо от того, что я делаю. Я понимаю, что это так. Это то, что я пытаюсь сделать возможным? Если да, можете ли вы указать мне в правильном направлении? Благодаря!

+2

КСТАТИ: Что вы имеете в виду, называется "литерал объекта", а не в формате JSON. JSON - это [очень строгий строковый формат] (http://json.org/), который может быть понят JavaScript 'eval()'. Ваш образец действителен JavaScript, но определенно не совместим с JSON. – Tomalak

+0

+1 Прохладный, спасибо за это! Я использовал это как ссылку (см. # 2) http://www.phpied.com/3-ways-to-define-a-javascript-class/ – jyoseph

+0

А теперь, когда я прочитал комментарии к статье, связанной с ней , кто-то также указал это автору. Хорошо знать! – jyoseph

ответ

4

Попробуйте this[productName][tier] вместо этого. В JavaScript обозначение точек и скобок идентичны. То есть, obj.a - это то же самое, что и obj['a'].

1

Простой.

getPrice: function (productQty,colorQty,productName,tier) { 

    return this[productName][tier] * productQty; 

} 

Объекты могут быть доступны в виде массива. Не забудьте обернуть его в блок try-catch, чтобы обрабатывать случаи, когда определенная комбинация клавиш не существует.

0

Вы можете просто сделать:

var colorQty = product.p20lb.one; 
var myProduct = product.getPrice(144, colorQty); 

getPrice: function (productQty, colorQty) { 
    return productQty * colorQty; 
} 
Смежные вопросы