前面的课程中讲解了两种情况下的函数this指向,全局this和成员方法this都是属于被动this,即默认设置的。
在JavaScript中,可以主动设置函数执行时的this变量,以覆盖掉默认设置。
call方法
每一个JavaScript函数对象都有一个call方法,通过call方法可以在指定的this来调用此函数。call方法参数如下:
func.call(this, ...args)
其中第一个参数是函数func执行时的this,this后面的参数将会保持原样的传给func。
我们通过一个例子来理解一下:
function setAge(aAge)
{
this.age = aAge
}
var student = {}
console.log(student.age) // 函数执行前输出
setAge.call(student, 18) // this参数被设置为student
console.log(student.age) // 函数执行后输出
上述代码中,setAge函数体本身与student对象无关,它只是将this的age属性设置为aAge。
我们来看一下运行结果:
可以看到,setAge.call()执行前,student.age为undefined; setAge.call()执行后,student.age为18。这说明setAge.call()方法成功改变了student对象的属性。
apply方法
除了call方法外,JavaScript中所有函数对象还一个apply方法,其作用与call类似。惟一的区别是apply方法将所有参数是数组的形式传入。apply语法如下:
func.apply(this, argsArray) // argsArray为一个Array对象
让我们用apply来改写一下上面的函数:
function setAge(aAge)
{
this.age = aAge
}
var student = {}
console.log(student.age)
// setAge.call(student, 18)
setAge.apply(student, [18]) // 使用apply
console.log(student.age)
可以看到,setAge.call替换成了setAge.apply,另外第二个参数由18变成了[18]。让我们看一下运行结果:
OK,完事。
什么是bind()?
什么是继承?