applyとbindを呼び出します。そしてそれらがどのように違うのか。
日常の用語を使って電話と申し込みを学びましょう。
your_scooter , your_car and your_jet
同じメカニズム(メソッド)で始まる3台の自動車があります。automobile
メソッドでオブジェクトを作成しましたpush_button_engineStart
。
var your_scooter, your_car, your_jet;
var automobile = {
push_button_engineStart: function (runtime){
console.log(this.name + "'s" + ' engine_started, buckle up for the ride for ' + runtime + " minutes");
}
}
呼び出しと適用がいつ使用されるかを理解しましょう。あなたがエンジニアであり、あなたが持っていると仮定しますyour_scooter
、your_car
そしてyour_jet
どのpush_button_engine_startで来て、あなたが第三者の使用を希望しませんでしたpush_button_engineStart
。
次のコード行を実行すると、エラーが発生します。どうして?
//your_scooter.push_button_engineStart();
//your_car.push_button_engineStart();
//your_jet.push_button_engineStart();
automobile.push_button_engineStart.apply(your_scooter,[20]);
automobile.push_button_engineStart.call(your_jet,10);
automobile.push_button_engineStart.call(your_car,40);
したがって、上記の例は、your_scooter、your_car、your_jetにAutomobileオブジェクトの機能を正常に提供します。
さらに詳しく見てみましょう
ここで、上記のコード行を分割します。
automobile.push_button_engineStart
使用されているメソッドを取得するのに役立ちます。
さらに、ドット表記を使用して、applyまたはcallを使用します。
automobile.push_button_engineStart.apply()
次に、2つのパラメーターを適用して呼び出します。
- 環境
- 引数
したがって、ここではコードの最終行にコンテキストを設定します。
automobile.push_button_engineStart.apply(your_scooter,[20])
呼び出しと適用の違いが配列の形式のパラメーターを受け入れることだけですが、callはコンマで区切られた引数のリストを受け入れるだけです。
JS Bind関数とは何ですか?
バインド関数は基本的に何かのコンテキストをバインドし、それを後で実行するために変数に格納します。
前の例をさらに良くしましょう。以前は、automobileオブジェクトに属するメソッドを使用して、それを装備していましたyour_car, your_jet and your_scooter
。ここpush_button_engineStart
で、希望する実行の後の段階で自動車を個別に起動するために、個別に個別に指定したいとします。
var scooty_engineStart = automobile.push_button_engineStart.bind(your_scooter);
var car_engineStart = automobile.push_button_engineStart.bind(your_car);
var jet_engineStart = automobile.push_button_engineStart.bind(your_jet);
setTimeout(scooty_engineStart,5000,30);
setTimeout(car_engineStart,10000,40);
setTimeout(jet_engineStart,15000,5);
まだ満足していませんか?
それを涙滴として明確にしましょう。実験する時間。関数アプリケーションの呼び出しと適用に戻り、関数の値を参照として保存してみましょう。
以下の実験は、呼び出しと適用がすぐに呼び出されるため失敗します。したがって、バインド関数がショーを盗む場所に変数に参照を格納する段階に到達することはありません。
var test_function = automobile.push_button_engineStart.apply(your_scooter);