一、理解函数调用
函数调用其实就是发挥函数作用的时候,我们常见的方式有如下几种方式
二、函数调用的方式
方式一:直接使用函数名调用,作为一个普通函数被调用
- 特点:函数内或者函数外均可调用
var a = 0
function f1() {
a++
}
function f2() {
f1()
a++
return a
}
f2() // 2
方式二:作为方法被某个实例对象调用
- 特点:方法被定义在某个对象的属性中
var obj = {
name: 'OBJECT',
f: function() {
return this.name
}
}
obj.f() // OBJECT
方式三:作为构造函数被new调用
function person(name) {
this.name = name
}
let p = new Person('d')
- new到底发生了什么
function newPerson(name) {
let o = {} // 创建一个对象
o.name = name // 给对象的属性赋值
return o // 返回该对象
}
方式四:使用call apply被使用
- call和apply的第一个参数是新的函数上下文(改变了this指向当前的第一个参数),后面的参数是函数的参数,下面的栗子2展示了call和apply传参的区别,apply需要传入的是数组
// 栗子1:通过call和apply改变新的this指向
var obj = {
name: 'OBJECT',
f:function() {
return this.name
}
}
var obj1 = {
name: 'OBJECT1'
}
obj1.f.call(obj1) // OBJECT1
obj1.f.apply(obj1) // OBJECT1
// 栗子2:call中如何传参
let name = 'window'
function f1(prop) {
return this.name + prop
}
let o = {
name: 'object'
}
f1.call(o, 'type')
f1.apply(o, ['type'])