JavaScript中call()、apply()、bind()方法特点讲解

在javascript中,每个对象中都会有一个apply()方法和一个call()方法

站在用户的角度思考问题,与客户深入沟通,找到徽县网站设计与徽县网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都做网站、成都网站制作、企业官网、英文网站、手机端网站、网站推广、域名申请、网络空间、企业邮箱。业务覆盖徽县地区。

两者的相同之处:

两者作用是都可以替代另一个对象调用一个方法,将一个函数的上下文改变成由thisObj指向的新对象

当我们通过call和apply来this的指向时,不传任何参数,则默认为将this指向修改为windows,有参数时会指向第一个参数

两者不同之处:

apply最多只能有两个参数——新this对象和一个数组argArray。如果给该方法传递多个参数,则把参数都写进这个数组里面,当然,即使只有一个参数,也要写进数组里。如果argArray不是一个有效的数组或arguments对象,那么将导致一个TypeError。如果没有提供argArray和thisObj任何一个参数,那么Global对象将被用作thisObj,并且无法被传递任何参数。

call它可以接受多个参数,第一个参数与apply一样,后面则是一串参数列表。这个方法主要用在js对象各方法相互调用的时候,使当前this实例指针保持一致,或者在特殊情况下需要改变this指针。如果没有提供thisObj参数,那么 Global 对象被用作thisObj。

案例:

 
 
 
  1. // apply()方法
  2. obj.apply(thisObj,['arg1', 'arg2'])
  3. // call()方法
  4. obj.call(thisObj,'arg1','arg2','arg3')

 以上thisObj继承了obj的属性和方法

 
 
 
  1. // 例1:
  2. function add(j, k){
  3.   return j+k;
  4. }
  5. function sub(j, k){
  6.   return j-k;
  7. }
  8. // sub继承了add方法
  9. console.log(add(5,3)); //8
  10. console.log(add.call(sub, 5, 3)); //8
  11. console.log(add.apply(sub, [5, 3])); //8
  12. // add继承了sub方法
  13. console.log(sub(5, 3)); //2
  14. console.log(sub.call(add, 5, 3)); //2
  15. console.log(sub.apply(add, [5, 3])); //2
  16. // 例2:
  17. var person = function(){
  18.   this.name = "Tom";
  19.   this.age = 22;
  20. }
  21. var other = {};
  22. console.log(other); // {}
  23. // other继承了person的属性
  24. person.call(other);
  25. console.log(other); // {name: "Tom", age: 22}

 bind绑定:

call()方法和apply()方法在绑定后会立即执行,而bind则不会立即执行

 
 
 
  1. add.bind(sub, 5, 3); // 返回的是add方法函数本体
  2. add.bind(sub, 5, 3)(); // 8

网站名称:JavaScript中call()、apply()、bind()方法特点讲解
URL标题:http://www.shufengxianlan.com/qtweb/news46/10896.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联