美文网首页
关于call和bind的区别

关于call和bind的区别

作者: UmustHU | 来源:发表于2019-07-10 00:11 被阅读0次

    不多说,直接上代码

    回调函数中用call

    更改函数的this指向,函数也会立即执行,返回值是函数的执行结果

    var obj = {
        name: 'Dot'
    }
    function test(callback){
        console.log('callback:',callback)
        callback();
    }
    test(function(){
        console.log('name:',this)
    }.call(obj))
    
    //打印结果
    //name: {name: "Dot"}
    //callback: undefined
    //Uncaught TypeError: callback is not a function
    
    回调函数中用bind

    更改函数的this指向,但是该函数不会立即执行,返回值是更改了this指向的函数

    var obj = {
        name: 'Dot'
    }
    function test(callback){
        console.log('callback:',callback)
        callback();
    }
    test(function(){
        console.log('name:',this)
    }.bind(obj))
    
    //  打印结果
    //  callback: ƒ (){
    //    console.log('name:',this)
    //  }
    //  name: {name: "Dot"}
    
    函数执行用call

    更改函数this指向,同时立即执行,没有返回值

    var obj = {
        name: 'Dot'
    }
    function printName() {
        console.log(this.name)
    }
    printName.call(obj)
    
    //  打印结果
    //  Dot
    
    函数执行用bind

    更改函数this指向,但是函数不会立即执行,而是返回一个更改this指向后的函数

    var obj = {
        name: 'Dot'
    }
    function printName() {
        console.log(this.name)
    }
    var res = printName.bind(obj)
    console.log(res)
    
    //  打印结果
    //  ƒ printName() {
    //      console.log(this.name)
    //  }
    
    res()
    //打印结果
    // Dot
    

    相关文章

      网友评论

          本文标题:关于call和bind的区别

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