经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JSJS库框架 » JavaScript » 查看文章
call/apply以及this指向的理解
来源:cnblogs  作者:杨小匠  时间:2018/10/10 9:02:57  对本文有异议

  javascript是面向对象的语言,Function也是一种对象,有自己的属性和方法。call和apply就是js函数自带方法,挂在Fucntion.prototype上。

  一般调用某函数时,直接“函数名(参数)”的写法即可,函数内部的this指向函数的调用者。

  1. function add(a,b){
  2. console.log(this);
  3. return a+b;
  4. }
  5. add(1,2) // 默认window调用,this指向window
  6.  
  7. var math = {
  8. add:function(a,b){
  9. console.log(this);
  10. return a+b;
  11. }
  12. }
  13. math.add(1,2) // this指向math

  call和apply的作用是给函数重新指定调用者,指定this的指向:

  1. var name = "WINDOW";
  2. var someone = {
  3. name: "yource"
  4. };
  5.  
  6. /** 一般写法 **/
  7. function greet1(person) {
  8. var reply = "Hello, " + person.name;
  9. console.log(reply)
  10. }
  11.  
  12. greet1(someone); // Hello, yource
  13.  
  14. /** 使用call/apply **/
  15. function greet2() {
  16. var reply = "Hello, " + this.name;
  17. console.log(reply)
  18. }
  19.  
  20. greet2(); // Hello, WINDOW
  21. greet2.call(someone); // Hello, yource
  22. greet2.apply(someone); // Hello, yource

  call和apply的不同之处仅在于提供参数的方式:call使用一组参数列表,apply使用参数数组。

  1. /*apply()方法*/
  2. function.apply(thisObj[, argArray])
  3.  
  4. /*call()方法*/
  5. function.call(thisObj[, arg1[, arg2[, [,...argN]]]]);

  apply最多只能有两个参数:调用者thisObj和一个数组argArray。call可以接受多个参数,第一个参数与apply一样,后面则是一串参数列表。

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

本站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号