call、apply、bind 解析

1.  call、apply、bind 都是用来重定义this的

2.  call、apply、bind区别

  //call、apply、bind区别
    var obj = {
        name: "猴菇",
        age: 2,
        introduce1: function(hobby, food) {
            alert(this.name+"-"+this.age+"-"+hobby+"-"+food);
        },
        introduce2: function () {
            alert(this.name+"-"+this.age);
        }
    }

    var objThis = {
        name: "猴面包树",
        age: 1
    }

    //不带参数调用对比:call、apply没啥区别,bind返回的是一个新的函数(所以需要加括号调用)
    obj.introduce2.call(objThis);
    obj.introduce2.apply(objThis);
    obj.introduce2.bind(objThis)();

    //带参数调用对比:
    //call:参数按顺序一个个传入即ok
    //apply:参数必须放入数组一起传入
    //bind:参数按顺序一个个传入即ok
    obj.introduce1.call(objThis, "爬山", "番茄");
    obj.introduce1.apply(objThis, ["爬山", "番茄"]);
    obj.introduce1.bind(objThis, "爬山", "番茄")();

 

posted @ 2021-01-28 14:18  碗粥  阅读(55)  评论(0编辑  收藏  举报