検索
ホームページウェブフロントエンドjsチュートリアルevalを使用せずに文字列からJavaScript関数を呼び出す方法

How to Call a JavaScript Function From a String Without Using eval

JavaScriptでは、

は良い考えではありません! mdnのevalページ:>この機能は時代遅れです。ブラウザは引き続きサポートしていますが、新しいプロジェクトでは推奨されていません。それを使用しないようにしてください。 eval

コードを含む文字列を実行します。たとえば、eval

eval("var x = 'Hello from eval!';");
console.log(x);

いくつかの問題が発生します:eval

  1. セキュリティ:文字列は、サードパーティのスクリプトまたはユーザー入力によって他のコマンドに挿入される場合があります。
  2. debug:エラーをデバッグするのは難しいです - ライン番号や明らかな障害ポイントはありません。
  3. 最適化:
  4. JavaScriptインタープリターは、それが変更される可能性があるため、必ずしもコードを事前互換化できるとは限りません。通訳はより効率的になっていますが、ほぼ確実にネイティブコードよりも遅くなります。
  5. 残念ながら、
は非常に強力で、経験の浅い開発者はこのコマンドを簡単に使いすぎることができます。警告にもかかわらず、

はまだ厳格なモードでも機能しますが、通常は避けることができます。過去には、主に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したがって、これが

の使用を停止するもう1つの理由です。さらに、このソリューションはより安全で、エラーが少なく、デバッグが簡単で、実行が速くなることがよくあります。それがあなたを助けることを願っています。
// 我们要运行的函数
var fnstring = "runMe";

// 查找对象
var fn = window[fnstring];

// 对象是否为函数?
if (typeof fn === "function") fn();

FAQは、eval

を使用せずに文字列からJavaScript関数を実行することに関する

eval()を使用せずに、javaScript関数を文字列で呼び出すことの意味は何ですか?

JavaScriptの

eval()関数は、任意のコード文字列を実行できる強力なツールです。ただし、セキュリティとパフォーマンスの問題により、eval()を使用することはしばしば悪い慣行と見なされます。コードを注射攻撃に対して脆弱にすることができます。さらに、最新のJavaScriptエンジンはコードのパフォーマンスを最適化しますが、実行されたコードを最適化することはできません。したがって、eval()を使用せずに文字列を使用してJavaScript関数を呼び出す方法を知ることは非常に有益です。これは、より安全で効率的な代替品であるeval()オブジェクトまたはwindowコンストラクターを使用することで実現できます。 Function

オブジェクトを使用して、文字列を使用してJavaScript関数を呼び出す方法は? window JavaScriptの

オブジェクトは、ブラウザによって表示されるウィンドウを表します。これは、ブラウザ環境のグローバルオブジェクトであり、すべてのグローバル変数と関数がwindowオブジェクトの属性と方法になります。 windowオブジェクトを使用して、windowオブジェクトのプロパティとして関数にアクセスすることにより、文字列を使用して関数を呼び出すことができます。例は次のとおりです。window

このコードでは、 "Hello"はオブジェクトのプロパティであり、関数を参照しています。したがって、
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

このコードでは、 "Hello"はオブジェクトのプロパティであり、メソッドを参照しています。したがって、

メソッドを呼び出します。

文字列を使用してJavaScript関数を呼び出すことの制限は何ですか?

文字列を使用してJavaScript関数を呼び出すと便利な場合がありますが、いくつかの制限もあります。 1つの制限は、グローバル関数または既知のオブジェクトの方法にのみ適用されることです。関数が既知のオブジェクトのプロパティではない場合、文字列で呼び出すことはできません。別の制限は、パラメーターを関数に直接渡すことができないことです。関数がパラメーターを受け入れる場合、それらを文字列に含めるか、他の関数を使用してそれらを渡す必要があります。これらの制限にもかかわらず、文字列を使用した関数を呼び出すことは、正しく使用すると強力なツールです。

以上がevalを使用せずに文字列からJavaScript関数を呼び出す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
JavaScriptの文字列文字を交換しますJavaScriptの文字列文字を交換しますMar 11, 2025 am 12:07 AM

JavaScript文字列置換法とFAQの詳細な説明 この記事では、javaScriptの文字列文字を置き換える2つの方法について説明します:内部JavaScriptコードとWebページの内部HTML。 JavaScriptコード内の文字列を交換します 最も直接的な方法は、置換()メソッドを使用することです。 str = str.replace( "find"、 "置換"); この方法は、最初の一致のみを置き換えます。すべての一致を置き換えるには、正規表現を使用して、グローバルフラグGを追加します。 str = str.replace(/fi

8見事なjQueryページレイアウトプラグイン8見事なjQueryページレイアウトプラグインMar 06, 2025 am 12:48 AM

楽なWebページレイアウトのためにjQueryを活用する:8本質的なプラグイン jQueryは、Webページのレイアウトを大幅に簡素化します。 この記事では、プロセスを合理化する8つの強力なjQueryプラグイン、特に手動のウェブサイトの作成に役立ちます

独自のAjax Webアプリケーションを構築します独自のAjax Webアプリケーションを構築しますMar 09, 2025 am 12:11 AM

それで、あなたはここで、Ajaxと呼ばれるこのことについてすべてを学ぶ準備ができています。しかし、それは正確には何ですか? Ajaxという用語は、動的でインタラクティブなWebコンテンツを作成するために使用されるテクノロジーのゆるいグループ化を指します。 Ajaxという用語は、もともとJesse Jによって造られました

独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか?独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか?Mar 18, 2025 pm 03:12 PM

記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

Ajaxを使用して動的にボックスコンテンツをロードしますAjaxを使用して動的にボックスコンテンツをロードしますMar 06, 2025 am 01:07 AM

このチュートリアルでは、Ajaxを介してロードされた動的なページボックスの作成を示しており、フルページのリロードなしでインスタントリフレッシュを可能にします。 JQueryとJavaScriptを活用します。カスタムのFacebookスタイルのコンテンツボックスローダーと考えてください。 重要な概念: ajaxとjquery

10 jQueryの楽しみとゲームプラグイン10 jQueryの楽しみとゲームプラグインMar 08, 2025 am 12:42 AM

10の楽しいjQueryゲームプラグインして、あなたのウェブサイトをより魅力的にし、ユーザーの粘着性を高めます! Flashは依然としてカジュアルなWebゲームを開発するのに最適なソフトウェアですが、jQueryは驚くべき効果を生み出すこともできます。また、純粋なアクションフラッシュゲームに匹敵するものではありませんが、場合によってはブラウザで予期せぬ楽しみもできます。 jquery tic toeゲーム ゲームプログラミングの「Hello World」には、JQueryバージョンがあります。 ソースコード jQueryクレイジーワードコンポジションゲーム これは空白のゲームであり、単語の文脈を知らないために奇妙な結果を生み出すことができます。 ソースコード jquery鉱山の掃引ゲーム

JavaScript用のクッキーレスセッションライブラリを作成する方法JavaScript用のクッキーレスセッションライブラリを作成する方法Mar 06, 2025 am 01:18 AM

このJavaScriptライブラリは、Cookieに依存せずにセッションデータを管理するためにWindow.nameプロパティを活用します。 ブラウザ全体でセッション変数を保存および取得するための堅牢なソリューションを提供します。 ライブラリは、セッションの3つのコア方法を提供します

jQuery Parallaxチュートリアル - アニメーションヘッダーの背景jQuery Parallaxチュートリアル - アニメーションヘッダーの背景Mar 08, 2025 am 12:39 AM

このチュートリアルでは、jQueryを使用して魅惑的な視差の背景効果を作成する方法を示しています。 見事な視覚的な深さを作成するレイヤー画像を備えたヘッダーバナーを構築します。 更新されたプラグインは、jQuery 1.6.4以降で動作します。 ダウンロードしてください

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン