美文网首页
6.递归、call、apply的用法

6.递归、call、apply的用法

作者: 何必处处示弱 | 来源:发表于2017-03-24 21:30 被阅读0次

函数的四种调用模式

  • 函数中的this,调用方式不同,指向不同
  • this与调用有关,与定义无关

函数调用模式

  • 函数名() || (function(){}()) ==> window

方法调用模式

  • 对象.方法名() || 对象方法名 || 祖对象.父对象.子对象.方法名() ==> 宿主对象

构造器调用模式

  • new 构造函数() || new 对象.构造函数() ==> new出来的新实例

间接调用模式(上下文调用模式)

  • call
    • 函数.call(指定的this,实参1,实参2,...)
    • 对象.方法.call(指定的this,实参1,实参2,...)
  • apply
    • 函数.apply(指定的this,[实参1,实参2,...])
    • 函数.apply(指定的this,{0: 实参1, 1:实参2, length: 2})
    • 对象.方法.apply(指定的this,[实参1,实参2,...])

call和apply的使用范例

// 方法借用 -- 给伪数组对象添加属性值
var obj = {};
Array.protype.push.call(obj, '要添加的第一个值', '要添加的第二个值')
// 方法借用 -- 获取对象类型
var arr = [];
Object.prototype.toString.call(new Date).slice(8, -1)
// 方法借用 -- 借用父类构造函数给子类实例添加属性
function Parent(name, age) {
    this.name = name;
    this.age = age;
}
function Son() {
    Parent.apply(this, arguments);
}
var p = new Son('火星人', 999);
// apply拆分数组或伪数组值依次传递给函数
var arr = [1, 10, 20, 40];
Math.max.apply(null, arr)

相关文章

网友评论

      本文标题:6.递归、call、apply的用法

      本文链接:https://www.haomeiwen.com/subject/wihqottx.html