2011-01-21 8 views
1

これについては、私は少しノブです。私はproductと呼ばれるクラス/オブジェクトを定義するためにJSONを使用していますが、そのオブジェクトの特定の部分にアクセスするために引数を渡す方法がわかりません。それをもっとうまく説明できないのは許してください。うまくいけば、私のコードサンプルは役に立ちます:どのように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); 

私は上記のコードサンプル内のコメントで述べたように、私は希望にない私はgetPriceに渡すことができ、引数、および「1」になりハードコードp20lb.one、「p20lb」議論になるだろう。そのため、おそらくこのような何か:

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

    return this.productName.tier * productQty; 

} 

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

しかし、それは何も行くではありません、私は関係なく、私は何をすべきかundefinedを取得していません。私は明らかにこれに就いています。私がしようとしていることは可能ですか?もしそうなら、正しい方向に私を向けることができますか?ありがとう!

+2

をところで:あなたがJSON、 "オブジェクトリテラル" ではないと呼ばれて参照してくださいどのような。 JSONはJavaScriptの 'eval()'で理解できる[非常に厳密な文字列形式](http://json.org/)です。あなたのサンプルは有効な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.aobj['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; 
} 
関連する問題