呼び出して、適用する、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