要想记得牢,首先要记着它存在的目标。
在javascript OPP中,我们常常如许定义:
function person(){}
person.prototype = {
name: 'jack',
say: function(){
console.log('my name is' + this.name)
}
}
var goodPerson = new person()
goodPerson.say() // 打印 my name is jack
如今有一个对象dog = {name:'wangwang'}
,这条狗也想会措辞(具有say要领),那末我们能够如许goodPerson.say.call(dog)
如许dog就能够措辞了。
var dog = {
name:'wangwang'
}
goodPerson.say.apply(dog) // my name is wangwang
或
goodPerson.say.call(dog) // my name is wangwang
能够看出call和apply是为了动态转变this而涌现的,假如一个object没有某个要领,而别的object有,那末就用得上call和apply了。
那call 和 apply有什么区分呢?
请看下边这个例子:
function add (a = 1, b = 1) {
return a + b
}
function sub (a = 1, b = 1) {
return a - b
}
add() // 2
sub() // 0
add.call(sub, 2, 2) // 4
add.apply(sub,[2,2]) // 4
sub.call(add, 3, 2) // 1
sub.apply(add, [3, 2]) // 1
so,很轻易就能够看出call和apply的区分就是传参数的体式格局差别。