js中call,apply,bind的使用区别

时间:2023-01-21 16:25:12 类型:JS/JQUERY
字号:    

一、call,apply,bind的相同点:

        都是改变this指向的;

        第一个参数都是this要指向的对象;

        都可以利用后续参数传参;

二、call,apply,bind的区别:

        call和bind的参数是依次传参,一一对应的;

        但apply只有两个参数,第二个参数为数组;

        call和apply都是对函数进行直接调用(函数已经执行),而bind方法返回的仍是一个函数(新生成一个新的函数);

const person = {
            name: "小明",
            age : 16,
            hobby:"打游戏",
            score:100,
            speak:function(hobby,score){
                console.log("名字",this.name,"年龄",this.age,hobby,score);
            }
       }
       person.speak();
       let p1 = {name:"小敏",age:17};
       person.speak.call(p1,"吹牛皮",90);
       //改变speak中this的指向 为p1。 并同时执行, 同时参数按照顺序传递

       let p2 = {name:"小小强",age:18};
       person.speak.apply(p2,["唱歌",20]);  
       //改变speak中this的指向 为p2。 并同时执行, 参数只有两个,且第二个必须为数组

       let p3 = {name:"小王",age:19};
       let pp = person.speak.bind(p3,"游泳",96);
       //改变speak中this的指向为p3, 但并没有执行,返回一个新的函数, 传递参数按照顺序执行
           pp(); //执行新的函数


<