`
mutongwu
  • 浏览: 448409 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

纠结的函数调用

阅读更多
今天看到一段代码,把call 和 apply 一起调用,让我琢磨的大半天:

function Foo() {}

Foo.prototype.method = function(a, b, c) {
    console.log(this, a, b, c);
};

// Create an unbound version of "method" 
// 输入参数为: this, arg1, arg2...argN
Foo.method2 = function() {

    // 结果: Foo.prototype.method.call(this, arg1, arg2... argN)
    Function.call.apply(Foo.prototype.method, arguments);
};

//上面的Foo.method2 等效于下面的代码:

Foo.method2 = function() {

    var args = Array.prototype.slice.call(arguments);
    Foo.prototype.method.apply(args[0], args.slice(1));
};


//example:
      Foo.method2({"a":33},1,2,3)
// output: Object { a=33} 1 2 3
// 可以看到: this指向了 对象 {"a":33},而剩下的参数正好传递给method了。

   结论:
       1. apply方法,会自动把arguments这个伪数组,解构,传递给 call方法。
       2. 我们知道,call的调用方法是:fn.call(obj,args1,args2,...),而 Foo.prototype.method 将会利用call方法得到执行。
       3.传递给 Foo.method2 的 arguments[0],相当于call参数的 obj,而 arguments的后续参数,将逐个按次序,传递给 Foo.prototype.method

分享到:
评论

相关推荐

    C语言用函数实现电话簿管理系统

    c语言上机课程 纠结了很久用函数还是链表,顺序表 感觉函数比较简单 实现: 最后显示对齐还可以使用”= s s s\n”使字节对齐 我用的\t 不够灵活 输入位数不一样的数时就不能对齐了  #include #include typedef ...

    TypeScript-Call-Graph:CLI生成来自TypeScript文件的函数和调用的交互式图形

    此CLI将在您提供的TypeScript文件中创建所有函数及其调用的交互式图形。 :warning: 这是一个正在进行的工作 :construction: 更多的可视化即将推出 如何使用 npm install -g typescript-call-graph 在任何目录中,...

    深入浅出JNA

    ### 深入浅出JNA — 快速调用原生函数 #### 为什么需要JNA?...通过本文的介绍,相信读者已经掌握了如何使用JNA进行跨平台的原生函数调用。在实际项目中,合理利用JNA可以提高开发效率,增强程序的功能性和灵活性。

    qtp、loadrunner

     函数调用:  1.直接代码调用,只要你记得= =  2.在step generator里调用,选择category:Function library:Library Functions,就可以找到你自己的函数库了  有关qtp的代码提示:  qtp的word complete居然是...

    Win32应用程序向导(C语言下)

    对于初学者来说,创建一个Win32应用程序可能会显得有些复杂,因为需要理解很多底层的概念和函数调用。这时,“Win32应用程序向导”就能发挥很大作用。 "Win32应用程序向导(C语言下)"是一个辅助工具,它简化了...

    JNI技术之动态注册与JNI线程.pdf

    在Android中,JNI函数默认在创建它的线程中执行,即如果Java层调用了一个JNI方法,该方法会在Java的UI线程中运行。这可能导致阻塞UI,所以有时需要在JNI中创建独立的线程。在示例代码中,`naitveThread()`函数可能...

    zigbee学习笔记

    针对Zigbee学习者来说,进一步学习的重点应当是掌握何时何地调用哪些函数,而不是过分纠结于底层实现。具体可以通过以下几个方面进行: 1. **熟悉ZDP和ZDO相关代码**:ZDP(ZigBee Device Profile)和ZDO(ZigBee ...

    全面了解JavaScript的作用域链

    JavaScript的作用域链 ... 对于这个例子,没有接触过这方面的时候,第一反应是会纠结下,这第一个的name,到底调用全局变量的name,还是函数内部的name呢,如果调用全局的,可是函数内部也用定义和赋值啊

    dwr入门教程

    Direct Web Remoting(简称DWR)是一种开源的JavaScript库,它使得从客户端调用服务器端的Java方法变得如同调用本地JavaScript函数一样简单。本教程旨在帮助初学者快速掌握如何将DWR整合到现有的Web应用程序中,特别...

    浅析C语言初学者应注意的几个问题.doc

    函数是C语言程序的基本构造单元,理解其调用机制和参数传递(值传递和地址传递)至关重要。指针则是C语言的核心特性,它允许直接操作内存,提供了高级数据结构和高效算法实现的基础。深入理解函数和指针,对掌握...

    cpp-CLI11是C11及更高版本的命令行解析器

    开发者可以通过简单的函数调用来添加选项、参数,并指定它们的行为和限制。 2. **灵活性**:CLI11支持多种类型的选项,包括布尔型、整型、浮点型、字符串型以及自定义类型。它还可以处理多值选项,允许用户传递多个...

    pzstudio青少年编程框架

    pzstudio的图形化编程环境可能包括了流程控制、变量操作、函数调用等基本元素,让孩子们在玩乐中学习编程。 此外,pzstudio支持脚本下载。这意味着用户可以下载已经编写好的脚本,用于学习或者作为项目的基础。这些...

    C语言项目教学设计思路

    对于暂时不常用的知识点,如变量存储类型,可以放在合适的情境中讲解,如在函数调用时再引入。 再者,注重实用性意味着在教学中要以培养学生的编程能力为主,目标是让大多数学生能够编写基本的程序,并对继续学习...

    《C语言程序设计》的教学改革探讨.pdf

    包括如何定义不同类型的变量(如int、float、char等),熟悉各类运算符和表达式的使用,以及掌握控制语句(如if-else、for、while等)和数组、指针、函数调用的方法。只有扎实的基础,才能顺利地阅读和理解他人编写...

    Linux从零入门实战-Shell编程-b64_c3VuJTIwYm95-it720.pdf

    5. **函数**:定义函数用`function funcname() {}`,调用函数用`funcname`。函数内部可以包含变量和命令,提高代码复用性。 6. **常用库**:Shell提供了许多内置命令和函数,如`grep`用于搜索文本,`awk`进行文本...

    如何在js代码中消灭for循环实例详解

    然而,如果数据集非常庞大,那么可能需要考虑更合适的编程语言,而不是仅仅纠结于哪种循环方式更快。这种微观层面的代码优化实际上并不是我们应当过度关注的点。 在使用这些高阶函数时,还可以结合自定义的辅助函数...

    c++程序设计实验答案,非电类

    2. **函数**:函数的定义、调用、参数传递,以及函数重载和递归的概念。 3. **数组与指针**:数组的使用、指针的理解和操作,以及数组与指针的关联。 4. **字符串处理**:C++中的字符串类`std::string`的使用。 5...

    可视化编程

    通过可视化编程,开发者可以将更多精力集中在应用的逻辑和功能设计上,而不是纠结于界面布局和底层细节。 总的来说,可视化编程以其易用性和高效性,已经成为现代软件开发的重要工具。它降低了编程的门槛,提高了...

    简单计算器源代码

    例如,当用户点击加法按钮,`OnBnClickedButtonAdd()`函数会被调用,这里我们将读取当前的数值,执行加法操作,并将结果显示在屏幕上。 在设计计算器界面时,我们还可以利用MFC的资源编辑器(Resource Editor)来...

    C++面向对象编程类库

    你是不是觉得C++标准函数库灰常复杂呢~~ 恭喜你找对资源了。来看看我们的C++面向对象编程类库吧。使用它,你可以用Visual C++调用类似于C#的类库。该类库模仿了C#语言的System类。资源内有头文件和示例项目。不要再...

Global site tag (gtag.js) - Google Analytics