は良い考えではありません! mdnのeval
ページ:>この機能は時代遅れです。ブラウザは引き続きサポートしていますが、新しいプロジェクトでは推奨されていません。それを使用しないようにしてください。 eval
コードを含む文字列を実行します。たとえば、eval
eval("var x = 'Hello from eval!';"); console.log(x);
いくつかの問題が発生します:eval
はまだ厳格なモードでも機能しますが、通常は避けることができます。過去には、主にJSONの文字列をゆるくするために使用されていましたが、今ではより安全なeval
メソッドがあります。ただし、文字列に関数名がある場合、たとえば:eval
JSON.parse
// 我们要运行的函数 var fnstring = "runMe"; function runMe() { // 执行操作 }
関数をどのように実行するのですか?私は最近、HTML5 History APIを使用しているときにこれに遭遇しました。 Webワーカーまたはオブジェクトをシリアル化する他のAPIを使用する場合、同様の課題に直面する可能性があります。 eval
runMe()
pushState
のない最も簡単で安全な実装ソリューションは、次のような一連の条件です。
安全ですが、何十もの機能を呼び出したい場合は、書くのは非常に非効率的で頭痛がします。より良い解決策は、現在のウィンドウとそのすべてのアイテムを参照するeval
オブジェクトを使用することです。
// 我们要运行的函数 var fnstring = "runMe"; switch (fnstring) { case "functionX": functionX(); break; case "functionY": functionY(); break; case "functionZ": functionZ(); break; case "runMe": runMe(); break; }
window
必要に応じて、追加のチェックを実行して、関数に予想される名前があることを確認できます。呼び出している関数にパラメーターがある場合はどうなりますか?おそらく配列に保存されていますか?問題ありません
fnstring
window
したがって、これが
// 我们要运行的函数 var fnstring = "runMe"; // 查找对象 var fn = window[fnstring]; // 对象是否为函数? if (typeof fn === "function") fn();
eval
eval()
を使用せずに、javaScript関数を文字列で呼び出すことの意味は何ですか? eval()
関数は、任意のコード文字列を実行できる強力なツールです。ただし、セキュリティとパフォーマンスの問題により、eval()
を使用することはしばしば悪い慣行と見なされます。コードを注射攻撃に対して脆弱にすることができます。さらに、最新のJavaScriptエンジンはコードのパフォーマンスを最適化しますが、実行されたコードを最適化することはできません。したがって、eval()
を使用せずに文字列を使用してJavaScript関数を呼び出す方法を知ることは非常に有益です。これは、より安全で効率的な代替品であるeval()
オブジェクトまたはwindow
コンストラクターを使用することで実現できます。 Function
window
JavaScriptのオブジェクトは、ブラウザによって表示されるウィンドウを表します。これは、ブラウザ環境のグローバルオブジェクトであり、すべてのグローバル変数と関数がwindow
オブジェクトの属性と方法になります。 window
オブジェクトを使用して、window
オブジェクトのプロパティとして関数にアクセスすることにより、文字列を使用して関数を呼び出すことができます。例は次のとおりです。window
eval("var x = 'Hello from eval!';"); console.log(x);
関数を呼び出します。 window
hello()
window["hello"]
コンストラクターとは何ですか?文字列を使用して関数を呼び出すためにどのように使用しますか? hello()
JavaScriptの
Function
オブジェクトを作成します。これはあまり一般的ではありませんが、機能を定義するためのまだ効果的な方法です。文字列をコンストラクターに渡すことにより、文字列を使用して関数を呼び出すために
Function
このコードでは、Function
コンストラクターは、「a」と「b」という2つの引数を取得し、合計を返す新しい関数を作成します。パラメーターと関数本体は文字列として渡されます。 Function
// 我们要运行的函数 var fnstring = "runMe"; function runMe() { // 执行操作 }
はい、関数がオブジェクトの何らかの方法である場合でも、文字列を使用して関数を呼び出すことができます。これは、オブジェクトのプロパティにアクセスしてアクセスすることで行うことができます。これは、オブジェクトの処理方法に似ています。例は次のとおりです。Function
文字列を使用してJavaScript関数を呼び出すと便利な場合がありますが、いくつかの制限もあります。 1つの制限は、グローバル関数または既知のオブジェクトの方法にのみ適用されることです。関数が既知のオブジェクトのプロパティではない場合、文字列で呼び出すことはできません。別の制限は、パラメーターを関数に直接渡すことができないことです。関数がパラメーターを受け入れる場合、それらを文字列に含めるか、他の関数を使用してそれらを渡す必要があります。これらの制限にもかかわらず、文字列を使用した関数を呼び出すことは、正しく使用すると強力なツールです。
以上がevalを使用せずに文字列からJavaScript関数を呼び出す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。