js改变this指向(call、apply、bind)

2021-04-11  本文已影响0人  一个记事本
           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'))
上一篇 下一篇

猜你喜欢

热点阅读