apply,call和bind方法总结

总结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); 



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。