美文网首页
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