js中的apply和call API
借用网上的一个例子:
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的更多相关文章
- 深入理解js中的apply、call、bind
概述 js中的apply,call都是为了改变某个函数运行时的上下文环境而存在的,即改变函数内部的this指向. apply() apply 方法传入两个参数:一个是作为函数上下文的对象,另外一个是作 ...
- js中call(),apply(),以及prototype的含义
最近段时间主要学习前端去了,然而所遇到的一些问题我觉得有必要去深究一下 prototype: 1 js中有三种表达方法 类方法,属性方法,原型方法 function People(name) { th ...
- js中call apply方法的使用介绍
js call call 方法 请参阅 应用于:Function 对象 要求 版本 5.5 调用一个对象的一个方法,以另一个对象替换当前对象. call([thisObj[,arg1[, arg2[, ...
- Js中的apply和call
1.call和apply都是为了改变某个函数运行时的上下文而存在的 2.也就是改变函数体内this的指向. 3.二者的作用完全一样,只是接受参数的方式不太一样. 4.call 需要把参数按顺序传递进去 ...
- js 中call,apply,bind的区别
call.apply.bind方法的共同点与区别: apply.call.bind 三者都是用来改变函数的this对象的指向: apply.call.bind 三者都可以利用后续参数传参: bind ...
- js中的apply调用
今天看了阮一锋老师的一篇文章,感觉很明了对闭包的理解,尤其是文章中的apply的介绍 apply()是函数对象的一个方法,它的作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象. ...
- 关于JS中的apply()与call()使用方法与区别
Js apply方法详解我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这里 ...
- Js中call apply函数以及this用法
this介绍: C#里this关键字的意义比较确定的.JavaScript的this关键字,随着函数使用场合不同,this的值会发生变化,感觉用法比较混乱,所以,现在是有必要整理一下的时刻了! 总结一 ...
- 闲聊js中的apply、call和arguments
JavaScript提供了apply和call两种调用方式来确定函数中的this的指向,在现实编码中,我确实 很少接触到这两个方法.但很无奈,很多面试题都要考这两种方法,我又没怎么用到,所以我们先来 ...
随机推荐
- C89标准库函数手册(待整理)
http://zh.cppreference.com/w/c 前言 ANSI C(C89)标准库函数共有15个头文件.这15个头文件分别为: 1.<assert.h> ...
- 调用REST接口获取数据
/// <summary> /// 根据机构代码本机构下报警用户列表: /// </summary> /// <param name="org_code&quo ...
- BZOJ 2324 营救皮卡丘(最小费用最大流)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2324 题意:n+1个城市(0到n).初始时K个 人都在0城市.城市之间有距离.要求(1) ...
- jQuery对html进行Encode和Decode
最近需要在前台对编辑器生成的html代码做处理,需要进行编码,考虑到js没有直接对html编码的支持,看了下jQuery的实现,发现真是超级简单呀,顺便记录一下,需要的时候可以参考一下. functi ...
- 梯度下降法VS随机梯度下降法 (Python的实现)
# -*- coding: cp936 -*- import numpy as np from scipy import stats import matplotlib.pyplot as plt # ...
- [HDOJ5726]GCD(RMQ,二分)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5726 题意:给定数列,求区间[L,R]的GCD的值,并求出有多少个子区间满足和[L,R]的GCD相等. ...
- Cookie 总结
设置Cookie //设置cookie Cookie cookie = new Cookie("TOM","111"); //设置有效期,默认秒为单位 cook ...
- Codeforces Round #260 (Div. 2)AB
http://codeforces.com/contest/456/problem/A A. Laptops time limit per test 1 second memory limit per ...
- 关于Android 构建
在简书上面有系列关于Android 的文章,还不错,部分同学可以在开发过程中阅读和学习:www.jianshu.com/collection/3fde3b545a35 关于Android 构建,看到这 ...
- java位运算符常见用法
1. 判断int型变量a是奇数还是偶数 a&1 = 0 偶数 a&1 = 1 奇数 2. 求平均值,比如有两个int类型变量x.y,首先要求x+y的和,再除以2,但是有可能x+y的结果 ...