js(6)知识小总结

js知识总结(函数的四种调用模式和call和apply的使用)

函数的四种调用模式

  • 函数中的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的使用范例

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