借用网上的一个例子:

 fun.call(this,arg1,arg2,arg3)

 fun.apply(this,arguments)

 this.fun(arg1,arg2,arg3)

三种方法等效。

详细内容这篇博客写的很清楚了,我就偷懒转一下了。

转载:http://www.cnblogs.com/fighting_cp/archive/2010/09/20/1831844.html

下面自己在总结一下自己的领悟:

先贴下代码:

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="person.js"></script>
<script src="student.js"></script>
<script src="boyStudent.js"></script>
</head>
<body>
<script src="main.js"></script>
</body>
</html>
 window.meng = window.meng || {};
(function () { function Person(name, age, gender) {
this._name = name;
this._age = age;
this._gender = gender;
} Person.prototype.showInfo = function () {
console.log("个人"+"\n姓名:" + this._name + "\n年龄:"
+ this._age + "\n性别:" + this._gender);
}; meng.Person = Person;
})();
 window.meng = window.meng || {};
(function () { function Student(name,age,gender,num) {
meng.Person.apply(this,arguments);
this._num=num;
} Student.prototype=new meng.Person();
Student.prototype.showInfo=function () {
console.log("学生"+"\n姓名:" + this._name + "\n年龄:" +
this._age + "\n性别:" + this._gender+"\n学号:"+this._num); };
meng.Student=Student;
})();
window.meng = window.meng || {};
(function () { function BoyStudent(name,age,num) {
meng.Student.call(this,name,age,"female",num);
} BoyStudent.prototype = new meng.Student();
BoyStudent.prototype.showInfo=function () {
console.log("男学生"+"\n姓名:" + this._name + "\n年龄:" +
this._age + "\n性别:" + this._gender+"\n学号:"+this._num); };
meng.BoyStudent=BoyStudent;
})();
 (function () {

     var per1=new meng.Person("Tom",12,"female");
per1.showInfo(); var stu1=new meng.Student("lilli",13,"female","001");
stu1.showInfo(); var boyStu1=new meng.BoyStudent("David",23,"002");
boyStu1.showInfo();
})();

输出结果:

好了,下面开始说明:

(这里说明一下,网上有些人说JS没有继承,但是这里我也写了继承。这也就是我对事物的理解问题,我本来专业学过JAVA,所以对继承了解深刻,而上面JS代码的写法和JAVA里的继承是一个概念,我这里就暂且叫他继承了。主要是理解概念,我感觉没必要死扣这个问题,就如有些人还说JS没有JAVA中的类,但是JS中的函数和JAVA的类也是一个差不多的概念,拿类的概念去理解函数的概念,也无可厚非)

开始说代码,先看下各个函数的参数,(这里帖这几个代码的意义也在于此)。

Person参数有三个name、age、gender这是每个人又具备的属性。

Student参数有有四个,多了个学号num的属性,这是学生所特有的。

BoyStudent参数有三个,同学生类中的三个,只是gender参数默认是female。

大体的结构是BoyStudent继承Student  Student继承Person。

BoyStudent继承Student的时候,是三个参数继承四个参数的,顾我用的是call()方法,因为他可以逐个给参数赋值,可以包含不一样的参数。

而Student继承Person的时候,是四个参数继承三个参数的,顾我用的是apply()方法,因为它一下把所有参数搬过来了,简单省事。

当然,call()方法完全可以代替apply()方法,但是能用apply()方法的时候,何必用call()方法逐个去赋值呢。╮(╯▽╰)╭

js中的apply和call API的更多相关文章

  1. 深入理解js中的apply、call、bind

    概述 js中的apply,call都是为了改变某个函数运行时的上下文环境而存在的,即改变函数内部的this指向. apply() apply 方法传入两个参数:一个是作为函数上下文的对象,另外一个是作 ...

  2. js中call(),apply(),以及prototype的含义

    最近段时间主要学习前端去了,然而所遇到的一些问题我觉得有必要去深究一下 prototype: 1 js中有三种表达方法 类方法,属性方法,原型方法 function People(name) { th ...

  3. js中call apply方法的使用介绍

    js call call 方法 请参阅 应用于:Function 对象 要求 版本 5.5 调用一个对象的一个方法,以另一个对象替换当前对象. call([thisObj[,arg1[, arg2[, ...

  4. Js中的apply和call

    1.call和apply都是为了改变某个函数运行时的上下文而存在的 2.也就是改变函数体内this的指向. 3.二者的作用完全一样,只是接受参数的方式不太一样. 4.call 需要把参数按顺序传递进去 ...

  5. js 中call,apply,bind的区别

    call.apply.bind方法的共同点与区别: apply.call.bind 三者都是用来改变函数的this对象的指向: apply.call.bind 三者都可以利用后续参数传参: bind ...

  6. js中的apply调用

    今天看了阮一锋老师的一篇文章,感觉很明了对闭包的理解,尤其是文章中的apply的介绍 apply()是函数对象的一个方法,它的作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象. ...

  7. 关于JS中的apply()与call()使用方法与区别

    Js apply方法详解我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这里 ...

  8. Js中call apply函数以及this用法

    this介绍: C#里this关键字的意义比较确定的.JavaScript的this关键字,随着函数使用场合不同,this的值会发生变化,感觉用法比较混乱,所以,现在是有必要整理一下的时刻了! 总结一 ...

  9. 闲聊js中的apply、call和arguments

    JavaScript提供了apply和call两种调用方式来确定函数中的this的指向,在现实编码中,我确实 很少接触到这两个方法.但很无奈,很多面试题都要考这两种方法,我又没怎么用到,所以我们先来 ...

随机推荐

  1. Python3基础 for循环 遍历并输出一个字符串的列表

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  2. map的使用(自增)ret = map(lambda x : x+100 if x % 2 == 1 else x - 100, [1,2,3,4,5])

    #!/usr/bin/env python ret = map(lambda x : x+100 if x % 2 == 1 else x - 100, [1,2,3,4,5]) print(ret) ...

  3. Java-集合框架整理

    一.List 接口集合: 1.优势以及特点:有序,允许重复元素 . 2.实现类: * AarrayList 类:不同步,可变长度数组,倍增率为 1/n ; * LinkedList 类:不同步,链表结 ...

  4. C#正则表达式获取组名,按照组名输出匹配内容

    最近写了个正则表达式匹配的工具,可以按照组名输出匹配内容,还是挺方便的,代码留存一下,以后用的话,直接copy了. Regex regex = new Regex(this.textBoxRegex. ...

  5. VS2013自动注释插件

    在程序编写的时候,你是否见过这种写法?整个项目每个cs文件头部都包含一个,版权,版本等信息的注释头? 类似这个类文件: /*************************************** ...

  6. Spring注解【非单例】

    花了至少一整天的时间解决了这个问题,必须记录这个纠结的过程,问题不可怕,思路很绕弯. 为了能说清楚自己的问题,我都用例子来模拟. 我有一个类MyThread是这样的: @Service public ...

  7. NFS配置项no_root_squash和root_squash的区别

    1.鸟哥的私房菜简体中文 http://linux-vbird.hillwood.cn/linux_server/0330nfs.htm 鸟哥的私房菜繁体中文 http://linux.vbird.o ...

  8. [SAP ABAP开发技术总结]将文件存储到数据库表中,并可发送邮件

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  9. 20150203一些移动端H5小bug解决

    都是一些我也不知道为什么会有的bug. 1. 在三星note2,小米2,页面加载后,页面有黑块. 那么提高被盖住的部分z-index. 2. iphone5 ,ios7.0.4,上文字显示不出 那么就 ...

  10. DB2常识

    1.DB2组件 appendixa. db2 database product and packaging informatin一节AESE: 高级企业服务器版(Advanced enterprise ...