bindが1つあることを知って申請して、むだに食べます!!
13437 ワード
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
ノード:
function sum(num) {
return num + this.num1 + this.num2;
}
console.log(sum(100));
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
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
Reference
この問題について(bindが1つあることを知って申請して、むだに食べます!!), 我々は、より多くの情報をここで見つけました
https://velog.io/@adguy/bind-apply-call-작성중
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
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])
Reference
この問題について(bindが1つあることを知って申請して、むだに食べます!!), 我々は、より多くの情報をここで見つけました https://velog.io/@adguy/bind-apply-call-작성중テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol