bindが1つあることを知って申請して、むだに食べます!!


bind(feat.Nodeのこのオプション)


jsではthisが大きく変化するので、かなり厄介です(次のノードのthisを参照)、固定する方法はバインドです.つまり、バインドプログラムは関数に対して「関数!後でthisを使用するときは、私が提供したパラメータとしてのオブジェクトを使用します!」と言います.コマンドを選択します.

function sum(num) {
    return num + this.num1 + this.num2;
}

console.log(sum(100));
上記のコードでは、thisはケースによって異なります.ブラウザ?node? 方法.異様
function sum(num) {
    return num + this.num1 + this.num2;
}

var myObj = {num1:20, num2: 3};

var customSum = sum.bind(myObj);

console.log(customSum(5));

// 출력값 28
sum.bind(myObj)この言葉の意味は
「sum関数を使用する場合は、必ずmyobjオブジェクトを参照してください!」したがってsum関数では、thisはmyobjを参照します.
sum関数の計算はreturn 5 + 20 + 3であるため、28は出力値である.
記事参照:https://kamang-it.tistory.com/entry/JavaScript07this-this%EB%B0%94%EC%9D%B8%EB%93%9C%ED%8E%B8bindcallapply

ノード:

  • ノード(関数ではない)では、ログにグローバルに書き込むだけです.出口です.ファイルをモジュールとして使用できるオブジェクトにします.
  • つまり、nodeでconsole.log(this)を撮影すると、ブラウザのようにwindowが現れるのではなく、{}の空のオブジェクトが現れます.Windowsとdocumentはノードに存在しないオブジェクトです.この2つのオブジェクトは、ブラウザの実行時に挿入されるオブジェクトです.
    例えば、彼を下に撮ると
    console.log(this, module.exports, exports);
    console.log(this === module.exports);
    console.log(this === exports);
    console.log(module.exports === exports);
    
    //결과
    {} {} {}
    true
    true
    true
    こうやって出てきたのがmoduleexport=exports=this.
    グローバル環境では,上記のように3位一体であり,関数宣言のthisはglobalである.
    function a() {
      console.log('a', this === exports, this === global);
    }
    const b = () => {
      console.log('b', this === exports);
    };
    a();
    b();
    
    //결과 
    a false true
    b true
    ノード
    グローバル環境のthis=>module.exports,
    関数宣言のthis=>global
    矢印関数のthis=>(親環境のthisを継承するため)モジュール.exports
    原文内容:https://www.zerocho.com/category/NodeJS/post/5b67e8607bbbd3001b43fd7b

    call, apply


    call,applyはbindだけでなく実行も可能である.
    どちらの機能も同じです.バインド後に実行します.
    違いはパラメータが異なることです.
    .call():呼び出された関数.call(指定するオブジェクト、呼び出し関数に入れるパラメータ1、パラメータ2...)
    .apply():呼び出された関数.apply(指定するオブジェクト、呼び出し関数に入れるパラメータ1、パラメータ2...)
    このようにcallはパラメータを個別に入れ,applyはパラメータを配列に入れる.
    (Callだけで十分)
    class Point {
        constructor(x, y) {
            this.x = x;
            this.y = y;
        }
    
        info(v, w) {
            console.log(`x : ${this.x} y: ${this.y}, v: ${v}, w: ${w}`);
        }
    }
    
    let point = new Point(10, 20);
    
    point.info(1, 2);
    
    let customPoint = { x: 100, y: 200 };
    
    point.info.call(customPoint, 20, 30);
    point.info.apply(customPoint, [2, 3])
    結果

    ファイルソース:https://replit.com/@heedaelee/JScall-apply-study#index.js
    ソース:
    https://kamang-it.tistory.com/entry/JavaScript07this-this%EB%B0%94%EC%9D%B8%EB%93%9C%ED%8E%B8bindcallapply