美文网首页
js改变this指向(call、apply、bind)

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

作者: 一个记事本 | 来源:发表于2021-04-11 14:07 被阅读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'))
    

    相关文章

      网友评论

          本文标题:js改变this指向(call、apply、bind)

          本文链接:https://www.haomeiwen.com/subject/mzuakltx.html