美文网首页
js中apply/call/bind

js中apply/call/bind

作者: 冰镇苏打水 | 来源:发表于2019-08-02 14:54 被阅读0次

apply/call/bind

  • 使用apply/call/bind改变 this 指向的

实现过程

apply
var a = {
    name:'Cherry',
    func1:function(){
        console.log(this.name)
    },
    func2:function(){
        setTimeout(function(){
            this.func1()
        }.apply(a),100)
    }
}

a.func2()       // Cherry
使用 call
var a = {
    name:'Cherry',
    func1:function(){
        console.log(this.name)
    },
    func2:function(){
        setTimeout(function(){
            this.func1()
        }.call(a),100)
    }
}

a.func2()       // Cherry
使用 bind
var a = {
    name:'Cherry',
    func1:function(){
        console.log(this.name)
    },
    func2:function(){
        setTimeout(function(){
            this.func1()
        }.bind(a)(),100)
    }
}

a.func2()       // Cherry
apply/call 区别
  • call 收到若干个参数
  • apply 接受一个包含多个参数的数组
var a = {
    name:'Cherry',
    fu:function(a,b){
        console.log(a+b)
    }
}

var b = a.fn;
b.call(a,1,2)   // 3

var c = a.fn;
c.apply(a,[1,2]) // 3
bind 与 apply/call 区别
  • bind 是创建一个函数,必须去手动调用
var a ={
    name : "Cherry",
    fn : function (a,b) {
        console.log( a + b)
    }
}

var b = a.fn;
b.bind(a,1,2)()           // 3

相关文章

网友评论

      本文标题:js中apply/call/bind

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