呼び出して、適用、バインド知人

呼び出して、適用する、3つのメソッドを持つ関数オブジェクトをバインドします  

役割:

このポイントを変更して

戻り値:

呼び出して、すぐに返す関数実行適用
バインド関数を返しますが、また後で呼ばれやすい

利用を:

受信されたパラメータが同様ではないことを除いて、両方の同一のアクション呼び出しに適用されます。コールは、パラメータに順次渡されている
とパラメータがアレイ状に配置される適用します。

バインド()メソッドは、結合機能と呼ばれる新しい機能を作成します。この機能バインディングを呼び出すときに場合、バインド機能が作成する
、このような第1のパラメータバインド()メソッド、第二及びその後の結合関数パラメータの着信バインド()メソッドに渡されたプラスランタイムは、
元の関数のためのパラメータとして元の関数を呼び出すために自分自身をパラメータ。
コール(このオブジェクトが指定されたコンテキストのように(指向する)、パラメータ1、パラメータ2、パラメータ3、パラメータ4、......、N-パラメータ)が
指定されたコンテキストのような点(このオブジェクト()適用します[パラメータ1、パラメータ2、パラメータ3、パラメータ4、...、パラメータn])

アプリケーションシナリオ:

あなたが知っているとき、適用条件は、パラメータの数は呼び出しでクリアされている場合はJavaScript、固定されていないパラメータの数の関数では、そう言っています。
  次いで、適用決定することなく使用され、場合配列を渡すパラメータに押し込みます。場合、パラメータの不確実性の数は、内部機能は、引数でこの配列をすべてのパラメータを横断することができます。

一般的な例:

(A)の呼び出し

  (1):アレイの間に追加

1  VARの ARRAY1 = [12、 'FOO'、{名前: 'ジョー'}、 - 2458 ]。
2  VARの配列2 = [ 'ドゥ'、555、100 ]。
3  Array.prototype.push.call(配列1、配列2)。
4にconsole.log(ARRAY1)//   [12、 'FOO'、{名前: 'ジョー'}、 - 2458、[ 'ドウ'、555、100] 
5にconsole.log(array1.length)// 5

 

1  VARの ARRAY1 = [12、 'FOO'、{名前: 'ジョー'}、 - 2458 ]。
2  VARの配列2 = [ 'ドゥ'、555、100 ]。
3  Array.prototype.push.call(配列1、配列2 ...)。
4にconsole.log(配列1)// [12、 'FOO'、{名前: 'ジョー'}、 - 2458、 'ドウ'、555、100] 
5にconsole.log(array1.length)    // 7

  (2):アレイ内の最大値と最小値を求めます

1  VARの   数= [5、458、120、-215 ]。 
2  VARの maxInNumbers = Math.max.call(数学、5、458、120、-215)。// 458

(B)適用

  (1):アレイの追加

1  VARの ARRAY1 = [12、 'FOO'、{名前: 'ジョー'}、 - 2458 ]。
2  VARの配列2 = [ 'ドゥ'、555、100 ]。
3  Array.prototype.push.apply(配列1、配列2)。
4にconsole.log(配列1)、// [12、 'FOO'、{名前: 'ジョー'}、 - 2458、 'ドウ'、555、100] 
5にconsole.log(array1.length)// 7

  (2):アレイ内の最大値と最小値を求めます

1つの VARの   数= [5、458、120、-215 ]。 
2つ のvar maxInNumbers = Math.max.apply(数学、数字)、    // 458

(C)結合

1つの VARバー= 関数(){
 2      はconsole.log(この.X)
 3  }
 4  のvar FOO = {
 5      X :. 3
 。6  }
 。7バール(); // 未定義
。8  のvar FUNC = bar.bind(FOO)。 
 。9  
10にconsole.log(FUNC)// ƒ(){(this.xで)はconsole.log;}戻り、本体の関数である
。11 FUNC(); // 3。

推奨言葉遣い:

1つの VARのバー= 関数(){
 2      はconsole.log(この.X)。
3  }
 4  のvar FOO = {
 5      X:3
 6  }
 7バール()。// 未定義
8  VARの FUNC = bar.bind(FOO)(); 
9  
10にconsole.log(FUNC)// 3

3つのすべての使用の比較を結合し、適用し、呼び出し:::

1つの VAR OBJ = {
 2    ×:81 3  }。
4    
5  VARの FOO = {
 6    のgetX:関数(){
 7      リターン この.X。
8    }
 9  }
 10はconsole.log(foo.getX.bind(OBJ)())。  // 81 
11はconsole.log(foo.getX.call(OBJ))。    // 81 
12はconsole.log(foo.getX.apply(OBJ))。   // 81

検証すべきデータの種類(D)が設けられている:(のtoString()メソッドがオーバーライドされていません)

1 Object.prototype.toString.call(OBJ)

(E)を添加:疑似アレイ

  JavaScriptで擬似配列構造と呼ばれるオブジェクトがあります。特別な機能は、argumentsオブジェクトであるだけでなく、彼らはのNodeListオブジェクトが擬似配列を返すに属し、同じようgetElementsByTagNameの、document.childNodesを呼び出します。アプリケーションは、POPまたはアレイのようにプッシュすることはできません。我々は、アレイ長性のリアルオブジェクトに変換Array.prototype.slice.callことができるので、アレイの下のすべての方法にdomNodesを適用することができます。

1つの 関数ログ(){
 2      にconsole.log(引数)// 引数(5)[1、2、3、4、5、呼び出し先:ƒ、シンボル(Symbol.iterator):ƒ] 
3      VAR引数= Array.prototypeを.slice.call(引数) 
 4      にconsole.log(引数)// 引数(5)[1、2、3、4、5、呼び出し先:ƒ、シンボル(Symbol.iterator):ƒ] 
5      args.unshift(」 (APP)」6      console.log.apply(コンソール、引数)// (APP)1 2 3 4 5 
7  }
 8ログ(1,2,3,4,5)

参考:
https://www.cnblogs.com/zhg277245485/p/6559475.html
http://www.admin10000.com/document/6711.html

おすすめ

転載: www.cnblogs.com/zero18/p/10983822.html