呼び出して、適用、バインドは、表面的な理解されています!

コードは呼び出しに非常に背が高く感じて適用(理解していない)が、彼らはあまりにも急いで少しですされてきた、今日それを把握する必要があります!
私が持っていたいつも丸暗記:質量参加は、1質量参加で呼び出すときに、この機能を変更するために使用され、バインドを適用し、呼び出し、呼び出し、すぐに実行に適用、質量参加の配列形式を適用すると、戻り値はあなたです戻り値メソッドは、メソッドが値を返さない場合、未定義が返され、呼び出します。このバインドは、新しい関数を返すことです変更した後、彼はすぐに実行されません。

ローテ結果は次のとおりです。常にこれらの三つの方法を考え、この独自の方法、恒久的に変更し、この元のメソッドを変更しました!間違ったああ!
1.質問をする:コールの使用シナリオの多くを見るために、それは理解せずにです!
実施例1:Object.prototype.toString.call(引数)を正確にデータのタイプを決定するために使用される:「[オブジェクト配列]」または「[対象オブジェクト」
例2:Array.slice.call(配列型)、または[] .slice .call(クラス配列)に使用される配列のクラスへの配列は、実際には、これはクラスの配列は、スライス、独自のメソッドを使用するようにしましょうしようではありません

。2.問題を検証:使用法を適用見えるが(他の誰かによって書かれた)
関数人(年齢、性別){
this.age =年齢;
this.sexセックス=;
};
関数成人(年齢、性別){
people.apply(この引数)
};
VAR =新しい新しいジャック成人(18 '人'である);
にconsole.log (jack.age +「:」+ jack.sex )
18に出力:男は
、実際にこのコードを見るには、それを使用する方法を知って適用されます。
実際には、適用され、最終的な分析では、対象が自分を使用することはできませんようにすることです、
3.展開します(ピットロードを記入):次のように私は(自分の書き込み)、これを変更しません検証について書くには適用されたい
関数fn(){
はconsole.log(この);
}
VAR OBJ = {A:[4 、5,6]、B [7,8]};
fn.apply(OBJ); // {A:(3)アレイ、B:配列(2)}

VARのFn新しい新F =(); // { }
     うつ病:私はfn.apply(OBJ)fnは、なぜ新しいオブジェクトのうち空であり、この時点OBJはまだのように変更し使用していませんか?aとbがそれを属性を持つことはすべきではありませんか?
答えは:あなたはちょうど(OBJ)これの実装への道がそれをobjを変更FN、FNを実施し、その後、出力fn.apply結果を使用し、これは、元の関数fnああを変更しません。
     そうでない場合と呼ばれる(配列のような)Array.slice.call一度、スライス方法あなたが入ってくる配列パラメータ、それに永久的な変化のこの配列の作るのですか!それはそれクレイジーではありません!
この丸暗記した後:Function.prototype法の下で結合し、適用され、呼び出し、その後、目的関数の役割、それをこの変更を実行する方法で、目的関数であり、何の実装では、オリジナルには影響しない、実行後に結果を出力します機能!
余談:あなたのコードはまた、これらの3つのメソッドを使用したい場合は、この問題のロジックは考慮されている配列のスライス文言を学ぶ必要があります。

おすすめ

転載: www.cnblogs.com/chenguangliang/p/10968971.html