apply() / call() / bind()

apply():

调用一个具有给定this值的函数,以及以一个数组(或类数组对象)的形式提供的参数。

语法:
     func.apply(thisArg, [argsArray])

参数:    
     thisArg:必选。指在函数运行时使用的 this 值。
                   非严格模式下,被指定为 空、 null 或 undefined 时,自动替换为指向全局对象,原始值会被包装。
     argsArray:可选,一个数组或者类数组对象,其中的数组元素将作为单独的参数传给 func 函数。如果该参数的值为 null 或  undefined,则表示不需要传入任何参数。

返回值:
    调用有指定this值和参数的函数的结果。

示例:
  var array = ['a', 'b'];
  var elements = [0, 1, 2];
  array.push.apply(array, elements);
  console.info(array); // ["a", "b", 0, 1, 2]

引用自:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/apply

call():

使用一个指定的 this 值和参数来调用一个函数。
接受一个参数列表。

语法:
     function.call(thisArg, arg1, arg2, ...)

参数:    
     thisArg:可选。指在函数运行时使用的 this 值。
                   非严格模式下,被指定为 空、 null 或 undefined 时,自动替换为指向全局对象,原始值会被包装。
                   严格模式下,被指定为 空、 null 或 undefined 时,this的值将会是 undefined
     arg1, arg2, ... :指定的参数列表。

返回值:
  使用调用者提供的 this 值和参数调用该函数的返回值。若该方法没有返回值,则返回 undefined。

示例:
  1. 调用函数并指定上下文的 this
  function greet() {
      var reply = [this.animal, 'typically sleep between',this.sleepDuration].join(' ');
      console.log(reply);
   }
    var obj = {
        animal: 'cats', sleepDuration: '12 and 16 hours'
    };
    greet.call(obj);  // cats typically sleep between 12 and 16 hours

引用自:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/call

bind():

创建一个新的绑定函数。绑定函数是一个怪异函数对象,它包装了原函数对象。调用绑定函数通常会导致执行包装函数。

语法:
     function.bind(thisArg[, arg1[, arg2[, ...]]])

参数:    
     thisArg:调用绑定函数时作为 this 参数传递给目标函数的值
     arg1, arg2, ...:当目标函数被调用时,被预置入绑定函数的参数列表中的参数。

返回值:
    返回一个原函数的拷贝,并拥有指定的 this 值和初始参数。

示例:
1. 创建绑定函数——创建绑定了具体对象的函数
  this.x = 9;    // 在浏览器中,this 指向全局的 "window" 对象
  var module = {
      x: 81,
      getX: function() { return this.x; }
   };
   module.getX(); // 81
    var retrieveX = module.getX;
    retrieveX(); // 返回 9 - 因为函数是在全局作用域中调用的

    // 创建一个新函数,把 'this' 绑定到 module 对象
    // 新手可能会将全局变量 x 与 module 的属性 x 混淆
    var boundGetX = retrieveX.bind(module);
    boundGetX(); // 81

2. 偏函数——使一个函数拥有预设的初始参数
  function list() {
      return Array.prototype.slice.call(arguments);
  }
  function addArguments(arg1, arg2) {
      return arg1 + arg2
  }
  var list1 = list(1, 2, 3); // [1, 2, 3]
  var result1 = addArguments(1, 2); // 3

  // 创建一个函数,它拥有预设参数列表。
  var leadingThirtysevenList = list.bind(null, 37);

  // 创建一个函数,它拥有预设的第一个参数
  var addThirtySeven = addArguments.bind(null, 37);

  var list2 = leadingThirtysevenList(); // [37]

  var list3 = leadingThirtysevenList(1, 2, 3);  // [37, 1, 2, 3]

  var result2 = addThirtySeven(5);  // 37 + 5 = 42

  var result3 = addThirtySeven(5, 10);  // 37 + 5 = 42 ,第二个参数被忽略

引用自:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

aplly()接受参数数组,call()接受参数列表,bind()接受参数。

你可能感兴趣的:(apply() / call() / bind())