const main = {
name: '123',
testFn: function(p1,p2, ...p3){
console.log(this.name + ',1' + p1 + ',2' + p2 + ',3' + p3 )
}
}
const obj = {
name: 'hjm'
}
main.testFn.call(obj, 'aaa', 'bbb') // call,如果方法接收多个参数,而call少传了参数数量,那在方法中也来会有值。和bind不同的是,bind未传第二个参数时,接收到的是undefined(只有第二个参数会是undefined)
main.testFn.call(obj, 'aaa', 'bbb', ...[1,2,3,4,5]) // call,第一个参数是要修改为谁的this对象,后面以逗号分隔传多个参数。
main.testFn.apply(obj, ['aaa', 'bbb'], 'apply除前两个参数外的都是无效的参数') // apply,只能传两个参数,第一个参数是要修改为谁的this对象,第二个参数为数组。
main.testFn.bind(obj, 'aaa', 'bbb')() //bind,和call相同,不同的是bind返回的是一个函数,而call和apply返回是undefined
main.testFn.bind(obj, ['aaa', 'bbb'])()//bind未传第二个参数时,接收到的是undefined(只有第二个参数会是undefined)
main.testFn.bind(obj, ['aaa', 'bbb'],'vvv')()
// call和apply返回undefined,bind返回函数本身,需调用。
console.log(main.testFn.call(obj, 'aaa', 'bbb'),main.testFn.apply(obj, ['aaa', 'bbb'], 'apply除前两个参数外的都是无效的参数'),main.testFn.bind(obj, 'aaa', 'bbb'))
网友评论