0

私はこのコードを持っています...

var suitcase = {
    shirt: "Hawaiian"
};

var checkProp = function(obj, prop, val){
if(obj.hasOwnProperty(prop)){
    console.log(obj.prop);
} else {
    obj.prop = val;
    console.log(obj.prop);
}
};
checkProp("suitcase","shorts","blue");

実行すると、未定義が返されます。表面上は問題なく見えます。構文の問題などはありません。これを機能させるにはどうすればよいですか?

4

5 に答える 5

0
var suitcase = {
    shirt: "Hawaiian"
};

var checkProp = function(obj, prop, val){
    if(obj.hasOwnProperty(prop)){
        console.log(obj[prop]);
    } else {
        obj[prop] = val;
        console.log(obj[prop]);
    }
};
checkProp(suitcase,"shorts","blue");
于 2013-02-07T15:38:31.787 に答える
0

suitcase文字列ではなく変数です。代わりに、それは読むべきです

checkProp(suitcase,'shorts','blue');
于 2013-02-07T15:34:36.007 に答える
0

Object名前ではなく、それ自体を渡します。

checkProp(suitcase,"shorts","blue");

また、obj[prop]の代わりに使用しobj.propます。
( では、文字通り、探しているプロパティではなく、オブジェクトobj.propのプロパティにアクセスしています。)prop

それ以外は、コードは機能します。ただし、次のように短縮できます。

var checkProp = function(obj, prop, val){
    obj[prop] = obj[prop] || val; // If obj[prop] exists, set it to itself (does nothing), otherwise, set it's content to `val`.
    console.log(obj.prop);
};
于 2013-02-07T15:34:59.260 に答える
0

あなたが望むのは、おそらく obj.prop の代わりに obj[prop] です

于 2013-02-07T15:35:27.643 に答える
0

いくつかの異なるオプションがありますが、あなたのソリューションがうまくいくと思います。ちょっとした誤差があるだけです。関数への呼び出しで:

checkProp('suitcase', 'shorts', 'blue);

"suitcase"オブジェクトでなければならないときに文字列として定義しました。それを修正してみて、それが機能するかどうかを確認してください。

編集:

試すことができる別のオプションは次のとおりです。

var checkProp = function(obj, prop, val){
    if(obj) {
        if(!obj[prop]) {
            obj[prop] = val;
        }
        if(window.console && window.console.log) {
            console.log(obj[prop]);
        }
    }
};
于 2013-02-07T15:37:03.213 に答える