美文网首页
apply,call和bind方法总结

apply,call和bind方法总结

作者: 前端胡萝卜 | 来源:发表于2019-03-31 12:35 被阅读0次

总结apply,call和bind方法各自的特点


1.apply:

使用语法:1)函数名.apply(对象,[参数1,参数2,参数3......]);

                    2)方法名.apply(对象,[参数1,参数2,参数3......]);

 作用:改变this指向;

特点:传参需以数组的形式传入;

2.call:

使用语法:1)函数名.call(对象,参数1,参数2,参数3.....);

                    2)方法名.call(对象,参数1,参数2,参数3.....);

 作用:改变this指向;

特点:传参需按照参数列表传入即可;

3.bind方法

使用语法:函数名.bind(对象,参数1,参数2,参数3.....);用法同call一样

作用:函数名.bind()方法,相当于是复制了这个函数,返回值就是复制后的一个函数

4.call和apply以及bind的异同点:

   相同点:作用相同,都是改变this指向

    异同点:1.传参列表不同,call和bind的传参列表相同,apply的传参列表略有差异

                     2.方式不同:call和apply相当于调用,而bind是复制了一份

注意:无论是apply还是call或者是bind中第一个参数不传,或者是传的是null,那么函数中的this都是window

例1:

//创建一个构造函数Person

function Person(name,sex,age){

     this.name = name;

}

Person.prototype.sum = function(x,y){

     console.log((x+y)+"====>"+this.id);

}

function  Student(name,id){ 

    //这里将Person构造函数的this指向改为Student

   //用法1:使用apply来改变this指向:传参列表是数组形式

      Person.apply(Student,[name]);  

    //用法2:使用call来改变this指向:传参以参数列表传入

       Person.call(Student,name);

       this.id = id;

}

//这是Person构造函数的实例化对象

var  per = new Person("小简");

//这是Student构造函数的实例化对象

var stu = new Student("小明","01");

//改变方法的this指向

//用法1:apply使用

per.hello.apply(Stu,[10,20]);

//用法2:call使用

per.hello.call(Stu,10,20); 


相关文章

网友评论

      本文标题:apply,call和bind方法总结

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