0
 $(".app-launch").on("click", function () {
    var appId = this.id;

    // Check if Function is running.
    if (typeof eval('$' + appId).start == 'undefined') {
         eval('$' + appId).start();
     }
 }

eval は単に戻ってきて、$XXXXXX が定義されていないと言って、Java スクリプトの実行を強制終了します。実行を強制終了して続行するのを防ぐ方法はありますか? この関数は、アプリケーションを起動するか、最初に JavaScript をロードしてからアプリケーションを起動するため、JavaScript が既にロードされているかどうかを判断するためにこのチェックが行われます。

4

3 に答える 3

1

まず、使用を中止してevalください。動的に名前を付けられる変数が必要な場合は、オブジェクトを使用します。

start次に、オブジェクトのプロパティにアクセスする前に、オブジェクトの型をテストするだけです。

var objects = {};
var appId = "thing";

objects[appId] = { start: foo; }

if (
    typeof objects[appId] !== 'undefined' &&
    typeof objects[appId].start === 'function'
   ) {
    objects[appId]();
}
于 2012-10-14T11:13:01.790 に答える
1

これを試して

eval('$("' + appId + '"')
于 2012-10-14T11:28:07.343 に答える
0

グローバル変数を取得しようとしている場合は、連想配列構文を使用してくださいwindow['$'+appId]

また、コードが壊れている理由は、start メソッドが定義されているかどうかを確認しているためですが、存在しないのは $XXXXXX です。メソッドを参照する前に、$XXXXXX が存在するかどうかを確認してください。また、メソッドが定義されていない場合はメソッドを呼び出しているため、意味がありません。

また、評価します。

これは、何が間違っているかを示すjsfiddleです。これは修正です。

于 2012-10-14T11:15:27.467 に答える