JavaScript方法——call和apply
1、相同点:
a) 产生的效果或作用完全相同;
b) 至少有一个参数;
c) 第一个参数必须有且是一个对象(Object),因为就是这个家伙偷懒。
2、不同点: 传递参数的方式。
前提:
1、有两个对象: A和B;
2、B有一个方法(这里用Function代替);
3、B的方法(Function)有两种参数传递的方式,但该方法产生的结果一样。
一种是除第一个参数外,其余的参数都打包进一个数组内,即B.Function.apply(A,args);
另一种是所有的参数都以各自的形式单独存在(包括第一个参数),即B.Function.call(A,arg,arg,......);
4、A想拥有和B同样的方法,但不想自己单独创建,即只想借用别人现成的东西(好赖皮)。
具体说明:
1、B.Function.call(A,arg,arg),这个例子是讲A对象“调用”B对象的Function(某个具体的方法)。
注意call方法中的参数arg:
a) arg的个数为零或多个;
b) arg可以是任何类型,包括Array(本人没有试过)。
call在这里译为“调用”,在JS中可以理解为“A对象调用B对象的某个方法”;
2、B.Function.apply(A,args),这个例子是讲A对象“应用”B对象的Function(某个具体的方法)。
注意call方法中的参数args:
a) args是Array对象的一个实例,也就是一个数组;
b) args的个数为零(就是说不起作用)或1个;(是否可以有多个,需要确认)。
apply在这里译为“应用”,即“A对象应用B对象的某个方法”。
以上的东东可有几处本人也没有试验过,比如说:
1、“至少有一个参数”,如果没有参数回事怎样?
2、“ 第一个参数必须有且是一个对象(Object),因为就是这个家伙偷懒。”,如果第一个参数为空又如何?
3、“arg可以是任何类型,包括Array”,是否arg真的可以为任何类型,本人都是传递String类型的参数。
JavaScript方法——call和apply的更多相关文章
- JavaScript方法call、apply、caller、callee、bind的使用详解及区别
一.call 方法 调用一个对象的一个方法,以另一个对象替换当前对象(其实就是更改对象的内部指针,即改变对象的this指向的内容). 即 “某个方法”当做“指定的某个对象”的“方法”被执行. Js代 ...
- javascript方法 call()和apply()的用法
先上代码: apply()方法示例 /*定义一个人类*/ function Person(name,age) { this.name=name; this.age=age; } /*定义一个学生类*/ ...
- Effective JavaScript Item 21 使用apply方法调用函数以传入可变參数列表
本系列作为Effective JavaScript的读书笔记. 以下是一个拥有可变參数列表的方法的典型样例: average(1, 2, 3); // 2 average(1); // 1 avera ...
- JavaScript彻底搞懂apply和call方法
彻底搞懂JavaScript中的apply和call方法 call和apply都是为了改变某个函数运行的context上下文而存在的,即为了改变函数体内部this的指向.因为JavaScript的函数 ...
- javascript方法--apply()
今天琢磨了一下apply,以前对这个方法觉得比较懵,今天一琢磨确实觉得挺好玩的. 一开始把MDN的apply文档看了一遍,感觉不是很理解,而且有一些东西也是知道但是比较模糊,所以还是一步一步来,不懂查 ...
- JavaScript中Call()以及Apply()的应用
apply()和call()的真正用武之地是能够扩充函数赖以运行的作用域 三点说明: 1.每个函数都包含两个非继承而来的方法:apply()和call(). 2.他们的用途相同,都是在特定的作用域中调 ...
- JavaScript函数 bind call apply区别
1. apply calll 在JavaScript中 call 和 apply 都是为了改变某个函数运行时上下文而存在的, 换句话说就是为了改变函数内部的this的指向. 这里我们有一个新的对象 b ...
- JavaScript 方法
对象的定义 var xiaoming = { name: '小明', birth: 1990 }; 是,如果我们给xiaoming绑定一个函数,就可以做更多的事情.比如,写个age()方法,返回xia ...
- javascript中 Function.prototype.apply()与Function.prototype.call() 对比详解
Function.prototype.apply()|Function.prototype.call() apply()方法可以在使用一个指定的 this 值和一个参数数组(或类数组对象)的前提下调用 ...
随机推荐
- codeforces 711E. ZS and The Birthday Paradox 概率
已知一年365天找23个人有2个人在同一天生日的概率 > 50% 给出n,k ,表示现在一年有2^n天,找k个人,有2个人在同一天生日的概率,求出来的概率是a/b形式,化到最简形式,由于a,b可 ...
- 浅谈对Spring Framework的认识
Spring Framework,作为一个应用框架,官方的介绍如下: The Spring Framework provides a comprehensive programming and con ...
- Swift学习笔记-ARC
Swift使用自动引用计数(ARC)机制来跟踪和管理你的应用程序的内存.通常情况下,Swift 内存管理机制会一直起作用,你无须自己来考虑内存的管理.ARC 会在类的实例不再被使用时,自动释放其占用的 ...
- [MAVEN]一、maven入门之软件的下载及配置到Eclipse中
1.Maven是什么? maven是Apache.org的一个子项目,他通过一个.pom的文件(xml文件)配置可以下载此项目中需要用到的jar包.文档.源码等.Maven提供了命令行的使用方式,我们 ...
- Javascript读写文件
<script type="text/javascript" language="javascript"> //读文件 function readF ...
- perl 模块安装
You can check if you have them installed in your machine with: > perl -e 1 -M<module> It wi ...
- JAVA之IO流(字节流)
输入和输出 JAVA的流分为输入流和输出流两部分, 输入流:InputStream或者Reader:从文件中读到程序中: 输出流:OutputStream或者Writer:从程序中输出到文件中: Re ...
- android开发之线程
线程(android) 在java中我们学习了线程,线程,是进程的一个单位,在程序要运行时,会开启线程,运行程序,我们要创建线程就需要我们去继承接口Thread或者实现Runabl ...
- Leetcode 255. Verify Preorder Sequence in Binary Search Tree
验证一个list是不是一个BST的preorder traversal sequence. Given an array of numbers, verify whether it is the co ...
- Java细粒度锁实现的3种方式
最近在工作上碰见了一些高并发的场景需要加锁来保证业务逻辑的正确性,并且要求加锁后性能不能受到太大的影响.初步的想法是通过数据的时间戳,id等关键字来加锁,从而保证不同类型数据处理的并发性.而java自 ...