関数の分類の詳細な説明とJavascriptでのこのポイントの例

関数の分類の詳細な説明とJavascriptでのこのポイントの例

JS で関数を定義する 3 つの方法

例を挙げて説明しましょう。

<スクリプト>
        //メソッド1
        関数fn() {
            console.log('fn が作成されました ');
        }
        //メソッド2
        var fn2 = 関数() {
            console.log('fn2 が作成されました');
        }
        //メソッド3
        var fn3 = 新しい関数('test'、'console.log(test);');
        fn3('fn3 テスト');
        コンソール.dir(fn3);
        console.log(fn3 オブジェクトのインスタンス);
    </スクリプト>

上記の例を実行すると、関数もオブジェクトであることが証明されます。インスタンスを作成するには、new + コンストラクターを使用できます。3 番目の方法は実行効率が低くなります。

関数プロトタイプチェーン

結果から、Function プロトタイプ オブジェクトの __proto__ が Object を指していることがわかります。

JS における関数の分類と呼び出し方法

例を挙げて説明しましょう。

<スクリプト>
        //関数の分類と呼び出し方法 //方法1 通常の標準関数、これはウィンドウを指す
        関数fn() {
            console.log('fn1' + これ);
        }
        fn(); //基本的にはwindow.fn(); グローバル関数はwindowのメンバーです //メソッド2オブジェクトメソッドthisは呼び出し元を指しますo
        var o = {
            こんにちは: 関数 () {
                コンソールにログ出力します。
            }
        }
        o.sayHi();

        //モード 3 コンストラクタは新しく作成されたオブジェクトを指し、ここでは star1 を指します。
        関数 Star(ユーザー名){
            this.username = ユーザー名;
        }
        var star1 = 新しい Star('ldh');

        //方法 4: イベント関数 this を関数呼び出し元 btn にバインドする
        var fn = 関数 (){
            console.log('btn がクリックされました' + this);
        }
        btn.onclick = fn;
        //ボタンをクリックして関数を呼び出す //方法5 タイマー関数 タイマーは実際にはウィンドウのメンバーなので、これはウィンドウです
        関数(){},1000 を設定します。
        // タイマーは設定された時間間隔で呼び出されます // 方法 6: 関数をすぐに実行します。これはウィンドウです。方法 1 と同じです (function(){console.log('function performed')})();
//すぐに実行を呼び出す必要はありません</script>

上記の例を通して、著者は基本的に自分が理解している機能の使い方をまとめています。方法4と方法6を比較すると、

  • 関数の後に () を追加すると、即時呼び出しを示すことがわかります。 () がない場合、それは関数ポインタを示し、関数が関数を呼び出さないことを示すだけです。
  • これは問題を指し示しており、これは呼び出し元を指していることを覚えておいてください

これが指す3つの関数を変更する

この指摘はJSにおいて非常に重要な問題です。上記の機能分類では、すでに体系的な分析を行っています。以下では、this ポインターを変更する 3 つの関数に焦点を当てます。

電話

属性継承を実装するには、親クラスのインスタンスをサブクラスのインスタンスに変更します。

<スクリプト>
        //関数を呼び出す 
        関数 Father(ユーザー名, 年齢) {
            this.username = ユーザー名;
            this.age = 年齢;
        }

        関数 Son(ユーザー名, 年齢, 性別) {
            Father.call(this, username, age); //親クラスのプロパティを継承します。this.gender = gender;
        }
    </スクリプト>

適用する

apply と call の違いは、パラメータが配列 (疑似配列) である点です。適用内では、配列は要素に分割されます

主にMathオブジェクトを使用します。Math.max.apply(Math, [4324, 45, 342, 23])

<スクリプト>
        //関数を適用する 
        var o = {
            ユーザー名: 'testuser'
        };
        関数fn(arr) {
            コンソールにログ出力します。
            (i = 0 とします; i < arr.length; i++) {
                コンソールにログ出力します。

            }
            console.log(これを);
        }

        fn.apply(o, [23, 43]);
        コンソールログ(Math.max(43, 45, 243, 342));
        console.log(Math.max.apply(Math、[4324, 45, 342, 23])); 
    </スクリプト>

バインド

関数を呼び出さずに、thisの参照のみを変更します

バインドされたイベントのthisを変更するために使用します。

<本文>
    <button>クリックしてください</button>
    <button>クリックしてください</button>
    <button>クリックしてください</button>
    <スクリプト>
        //バインド関数
        //ケース: 確認コードを送信し、3 秒後に再度送信する複数のボタンを実装します。var btns = document.querySelectorAll('button');
        (i = 0 とします; i < btns.length; i++) {
            btns[i].onclick = 関数(){
                this.disabled = true;
                setTimeout(関数() {
                    this.disabled = false; //これをbtnを指すように変更し、3000ms後に実行します}.bind(this), 3000);
            }
        }        
    </スクリプト>
</本文>

要約する

これで、Javascript の関数分類と this ポイントに関するこの記事は終了です。より関連性の高い JS 関数分類と this ポイントに関するコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JSの矢印関数におけるこのポイントの詳細な説明
  • JavaScript関数におけるこのポイントの問題の詳細な説明
  • JS 匿名関数内の this ポイント問題の詳細な分析
  • js関数のスコープとこれのポイントについての深い理解
  • JavaScriptはsetIntevalの関数パラメータでこれを特定のオブジェクトを指すようにします
  • JavaScript関数の詳細な説明これを指す問題

<<:  Tomcatの自動シャットダウンに関するバグ修正

>>:  MySQL でトリガーを無効化および有効化するチュートリアル [推奨]

推薦する

Windows 10 でカスタムドメイン名をバインドするように Hexo と GitHub を構成する方法

Hexo は Windows 10 でカスタムドメイン名を GitHub にバインドしますまずドメイ...

JavaScript における var、let、const の違いの詳細な説明

目次グローバル変数として可変ホイスト一時的なデッドゾーンブロックスコープ重複したステートメント宣言さ...

MySQL 8.0.15 のインストールと設定のグラフィックチュートリアル

この記事ではMySQL 8.0.15のインストールと設定方法を参考までに記録します。具体的な内容は以...

MySQL での select、distinct、limit の使用

目次1. はじめに2. 選択2.1 単一列のクエリ2.2 複数の列のクエリ2.3 すべての列をクエリ...

MySQL スロークエリログの詳細な理解

目次スロークエリログとは何ですか?スロークエリを有効にする方法ログ分析ツール mysqldumpsh...

VueとReactの詳細

目次1. パノラマII. 背景1. 反応: プロフェッショナル2. ビュー: 凡例3. 技術的な思考...

XHTML 入門チュートリアル: フレーム タグの使用

<br />フレーム構造により、ブラウザの 1 ページに複数の Web ページを同時に表...

優れたWebフォームデザイン事例20選

ソフィー・ハルダッククライドキー埠頭 37 東ソープボックス Rxバランス EEハーバー対比 SVN...

MySQLのジョイントインデックス機能の分析と使用例

この記事では、例を使用して、MySQL 共同インデックスの機能と使用方法を説明します。ご参考までに、...

js で下線とキャメルケースの変換を実装する (複数の方法)

目次適用シナリオ:方法 1: 正規表現 (推奨)方法2: 配列のreduceメソッドを使用する方法3...

Reactは二次的連鎖効果(階段効果)を実現する

この記事では、二次リンク効果を実現するためのReactの具体的なコードを参考までに共有します。具体的...

MySQL マスタースレーブレプリケーションと読み取り書き込み分離の詳細な説明

目次序文1. 概要2. 読み取りと書き込みの分離3. MySQL マスタースレーブレプリケーションの...

Mac インストール mysqlclient プロセス分析

仮想環境で pip 経由でインストールしてみてください: pip で mysqlclient をイン...

MySQL 5.7 データベースのインストール手順の個人的な要約

1.mysql-5.7.19-winx64.zip(これは無料のインストールバージョンで、約318 ...

MySQL 8.0の新機能、隠しフィールドの詳細な説明

序文MySQL バージョン 8.0.23 では、新しい機能「Invisible Column (In...