• Javascript中call方法和apply方法用法和区别


      第一次在博客园上面写博客,知识因为看书的时候发现了一些有意思的知识,顺便查了一下资料,就发到博客上来了,希望对大家有点帮助。  

      连续几天阅读《javascript高级程序设计》这本书了,逐渐发现了以前很多自己完全没有用过甚至见过的神奇知识点。今天在阅读到有关函数的属性和方法的时候,略感高级,于是乎,查阅了不少他人的博客,在此总结一下这两个方法的以下几个方面:

    1.call()和apply()的作用和用法
    2.什么时候用apply(),什么时候用call()

      书上提到,每个函数都包含两个非继承而来的方法:apply和call,他们的作用都是将函数绑定到另外一个对象上去运行,也就是说,这两个方法的用途都是在特定的作用域中调用函数,调用的时候,设置了函数体内this对象的值。首先展示一下它们的用法: 

    1 fun.apply(thisArg[, argsArray]);
    2 fun.call(thisArg[, arg1[, arg2[, ...]]]);

     可以看出,apply与call的区别是第二个参数不同。apply是  数组或者arguments 对象。而call是逗号隔开的任何类型。为了更直观地展示这两个方法的用法,先举一个例子:

     1 <script type="text/javascript">
     2     window.color = "red";
     3     var colorSet = {
     4         color : "gray"
     5     }
     6     function showColor() {
     7         alert(this.color);
     8     }
     9     showColor();        //red
    10 
    11     showColor.call(this);        //red
    12     showColor.call(window);        //red
    13     showColor.call(colorSet);        //gray
    14 </script>

    这里先介绍以下this指针的概念:在javascript里面,this指针代表执行当前代码的对象所有者。在非严格模式下,未指定环境对象而调用函数,this指针值不会转型为window。当执行上面的代码的第9行的时候,所在的执行环境是全局环境,对象所有者是window,而window对象有一个color属性,因而得到的结果是red。至于11和12行,就是显示调用了window。接下来的13行就是上面代码的关键了,当运行showColor.call(colorSet);的时候,函数的执行环境不一样了,此时函数体内的this指针指向了对象colorSet,于是结果显示的就是colorSet的color属性。

    本文主要参考了一下博客:

    http://blog.csdn.net/myhahaxiao/article/details/6952321

    本文章属于个人原创,如需转载,请加上原文链接,谢谢。
  • 相关阅读:
    舍不得花钱的心理分析
    DLL编程的导入导出,__declspec(dllimport),__declspec(dllexport)
    浅谈C/C++内存泄漏及其检测工具
    C++多线程编程简单实例
    linux镜像源设置
    Linux基础教程 linux无密码ssh登录设置
    兄弟连教育分享:用CSS实现鼠标悬停提示的方法
    PHP基础教程 PHP的页面缓冲处理机制
    Linux基础教程 linux下cat 命令使用详解
    PHP基础教程 php 网络上关于设计模式一些总结
  • 原文地址:https://www.cnblogs.com/yuanzm/p/3723901.html
Copyright © 2020-2023  润新知