借用网上的一个例子:

 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. mfc unicode下一些容易容易搞混的基本类型

    经理要求以后的项目都使用unicode,整理以下看起来让人懵逼的基本类型... 其实在mfc中最容易让人发狂的就是关于字符的操作了. 两种常见基本C++char:(当然C++11新增char_16t. ...

  2. 【leetcode❤python】24. Swap Nodes in Pairs

    #-*- coding: UTF-8 -*- # Definition for singly-linked list.# class ListNode(object):#     def __init ...

  3. [转自老马的文章]用MODI OCR 21种语言

    作者:马健邮箱:stronghorse_mj@hotmail.com发布:2007.12.08更新:2012.07.09按照<MODI中的OCR模块>一文相关内容进行修订2012.07.0 ...

  4. JUnit 单元测试 配置

    选中工程,右键  built path , add liberaries , JUnit , JUnit4 这样就不用每次测试时都在main方法中写了

  5. Linux的查找命令

    1. 文件搜索find find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件. find的使用格式如下: $ find [搜索路径] [搜索条件][搜索文件名] 如果什么参数也不加,fi ...

  6. 制作一个属于自己的BHO吧!(C#) (转)

    摘自:http://tech.ddvip.com/2013-05/1369758775196257.html BHO(Browser Helper Object)是插件,它寄存在IE浏览器中运行.在咱 ...

  7. STL--STL和她的小伙伴们:

    STL--概述: 标准模板库(StandardTemplateLibrary,STL),是C++程序设计语言标准模板库.STL是由Alexander Stepanov.Meng Lee和David R ...

  8. git学习笔记11-git多人协作-实际多人怎么开发

    当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin. 要查看远程库的信息,用git remote: $ git r ...

  9. TCP协议中的三次握手和四次挥手(图解) 转载

    建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资 ...

  10. 适应各浏览器图片裁剪无刷新上传jQuery插件(转)

    看到一篇兼容性很强的图片无刷新裁剪上传的帖子,感觉很棒.分享下!~ 废话不多说,上效果图. 一.首先建立如下的一个page <!DOCTYPE html> <html xmlns=& ...