经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JavaScript » 查看文章
call、apply、bind
来源:cnblogs  作者:元芳啊  时间:2022/1/17 11:05:06  对本文有异议

 

call() 和apply()可以看作是某个对象的方法,通过调用方法的形式来间接调用函数

都是在特定作用域中调用函数,等于设置在函数体内的this的值。

call()和apply()的第一实参是要调用函数的母对象。

注:在严格模式中,call()和apply()第一个实参都会变成this的值,哪怕传入的实参是null 或undefined。

call()

call()的第一个参数是this值没有变化,其余参数都是直接传递给函数,换句话说,传递给函数的参数必须逐个列举出来。

  1. function f() { }
  2. var o = {};
  3. // 要想以对象o的方法来调用函数f(),可以下面的写法
  4. f.call(o);
  5. // 与下面代码的功能类似:
  6. o.m = f;
  7. o.m();
    delete o.m;


  8. // 列举除第一个参数外的其余参数
  9. Math.min.call(this,1,2,3,4,5); // 1
  10. Math.max.call(this,1,2,3,4,5); // 5
  11.  
  12. // ES6语法 ...为ES6新增的 扩展运算符
  13. Math.min(...[1,2,3,4,5]); // 1
  14. Math.max(...[1,2,3,4,5]); // 5

 

apply()

apply()的用法和call()并无区别,只是参数不同。apply()方法接收两个参数,一个是在运行函数的作用域,另一个是数组(可以是Array实例,也可以是arguments对象)。

 

  1. function f() { }
  2. var o = {};
  3. // 要想以对象o的方法来调用函数f(),可以下面的写法
  4. f.apply(o);
  5. // 与下面代码的功能类似(假设对象o中没有m属性):
  6. o.m = f;
  7. o.m();
  8. delete o.m;
  9. // 列举除第一个参数外的其余参数
  10. Math.min.apply(this, [1, 2, 3, 4, 5]); // 1
  11. Math.max.apply(this, [1, 2, 3, 4, 5]); // 5
  12.  
  13. // ES6语法 ...为ES6新增的 拓展运算符
  14. Math.min(...[1, 2, 3, 4, 5]); // 1
  15. Math.max(...[1, 2, 3, 4, 5]); // 5

 

bind()

  bind的主要作用是将函数绑定到某个对象。返回一个新函数。

  通过可选的指定参数,作为指定对象的方法调用该方法。

 

  1. function f(y) { return this.x + y;}
  2. var o = { x: 1 };
  3. var g = f.bind(o); // 通过g(x)来调用o.f(x)
  4. g(2); // 3

 

 

 

 

 

 

  1. ...为ES6新增的 扩展运算符
好好做人,认真生活。

原文链接:http://www.cnblogs.com/liuyuanfang/p/13893478.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号