【Javascript】call/apply
2018-09-21 本文已影响0人
嘻洋洋
为什么要用call/apply
把一些通用函数写好,可以任意绑定在多个类的原型上,这样动态的给类添加了一些方法,还节省了代码。这是一种强大的功能,也是动态语言的强表现力的体现。JS 里的 call/apply 在任何一个流行的 lib 里都会用到,但几乎就是两个作用:
两个方法的用法说明
这两个方法从哪来的:
- 每个函数都包含两个非继承而来的方法:call()方法和apply()方法。
- 相同点:这两个方法的**作用是一样的。
两个方法的区别,接收参数的方式不同:
- apply()方法 接收两个参数,一个是函数运行的作用域(this),另一个是参数数组(argArray)。如果argArray不是一个有效数组或不是arguments对象,那么将导致一个 TypeError,如果没有提供argArray和thisObj任何一个参数,那么Global对象将用作thisObj。
- call()方法 第一个参数和apply()方法的一样,但是传递给函数的参数必须列举出来。
var Pet = {
words : '...',
speak : function (say) {
console.log(say + ''+ this.words)
}
}
Pet.speak('Speak'); // 结果:Speak...
var Dog = {
words:'Wang'
}
//将this的指向改变成了Dog
Pet.speak.call(Dog, 'Speak'); //结果: SpeakWang