0

私はその機能を持っています:

function(stringsVar) {
var stringRes = stringsVar || localize_en;
if('window.'+stringsVar === undefined) {
    stringRes = localize_en;
}
...
}

動作しません。それは実際にそのようなものでした:

function(stringsVar) {
    var stringRes = stringsVar || localize_en;
}

その関数はパラメーターを取るかどうかに関係なく、上記のコードはそれを正しくチェックしています。その関数のパラメータは変数になります。その機能を自分の機能に追加したいと考えています。その変数が定義されているかどうかをチェックします。システムで定義された変数 localize_en がない場合は、デフォルトとして割り当てられます。

コードを修正するにはどうすればよいですか。コードの 2 番目の部分はその機能になります。つまり、stringsVar は localize_ar であり、定義済みの変数ではありません (そのような変数は var キーワードで定義します)。

if(window.localize_ar === undefined){
alert('yes');}
else {
alert('no');
}

その機能をパラメトリックとして追加します。

何か案は?

PS: localize_en などの変数はオブジェクトです。

編集:私は JQuery ローカライザー プラグイン =>ソース コードに取り組んでいます。私はそれを

$('html').localize('localize_' + tr);

ただし、それをオブジェクトとして理解することはできません。

$('html').localize(localize_tr);

それを文字列に変更します 多分問題はそこにありますか?

4

1 に答える 1

2

角括弧表記を使用して、名前が変数に格納されているオブジェクト メンバーを参照できるため、おそらくこれを探しているでしょう。

if (window[stringsVar] === undefined) {

}

さらに、||演算子は最初の真実を返します。オブジェクトが最初のパラメーターとして渡されるとどうなりますか? それは真実ですが、具体的にはstringが必要なため、||演算子はクールに見えますが、次のものがより適切であることがわかるかもしれません:

if (typeof stringVar !== "string") {
    stringVar = "localize_en";
}

また、文字列を使用して対象のオブジェクトを参照するときと、そうでないときを混乱させているようです。

次のようなことをするとき:

window[someVar]

someVar 文字列である必要があります。

JavaScript では参照によってオブジェクトを渡すことができます。現在の問題を解決するために上記のすべてを記述した後、より良いアプローチは、最初に参照によってオブジェクトを渡し、問題を完全に回避することです。 、オブジェクトを格納する変数の名前を渡すのではなく:

function(obj) {
    if (typeof obj !== "object") { 
        obj = localize_en; // here we're wanting the object itself, rather than the name of the object, so we're not using a string.
    };

    // Now use `obj`. It'll be either the object the user passed, or the default (localize_en).

    // You can even store this in a global variable if you want to:
    window.selected_obj = obj;
}

編集:

あなたのコメントから、これを試してください:

function (stringsVar) {
    if (typeof stringsVar !== "string" || typeof window[stringsVar] !== "object") {
        stringsVar = "localize_en"; // Set the default of the argument, if either none is provided, or it isn't a string, or it doesn't point to a valid object
    }

    var stringRes = window[stringsVar];

    // Now do *whatever* you want with stringRes. It will either be the *valid* localization type the parameter specified, or the default ("localize_en").
}

この関数にはstringを渡す必要があります。

于 2011-08-26T08:10:15.250 に答える