javascript中bind,apply,call的相同和不同之处

javasctipt中bind,apply,call的相同点是:

  1,都是用来改变this的指向;

  2,都可以通过后续参数进行传参;

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

  

  不同点:

  1,调用方式不同,apply和call的调用方式一致,但是bind方式就不一样了;


var xz = { name:'小张', age:20, show: function () { console.log("name: %s; age: %d;",this.name,this.age); } } var xh = { name:'小红', age:22 }; xz.show(); xz.show.apply(xh); xz.show.call(xh);
     xz.show.bind(xh)(); //bind方法返回的任然是一个方法,所以还需要加()进行调用;

  2,传参方式不同

var xz = {
            name:'小张',
            age:20,
            show: function (school,grade) {
                console.log("name: %s; age: %d; school:%s; grade:%s",this.name,this.age,school,grade);
            }
        }

var xh = {
            name:'小红',
            age:22
        };

        xz.show('四川大学','12级4班');
        xz.show.apply(xh,['电子科技大学','10级5班']);
        xz.show.call(xh,"电子科技大学成都学院",'12级4班');
        xz.show.bind(xh,"电子科技大学成都学院",'12级4班')();
        xz.show.bind(xh)("电子科技大学成都学院",'12级4班');    

  apply的传参方式是数组形式;call和bind的传参方式相同,使用一一对应的方式传入,而bind还有另外一种传参方式就是在后面的回调里面穿入参数

posted @ 2016-10-13 14:52  默默到来  阅读(298)  评论(0编辑  收藏  举报