call与apply的区别
/**
* 用 add 来替换 sub,add.call(sub,3,1) == add(3,1) ,所以运行结果为:alert(4);
*/
function add(a,b){
alert(a+b);
}
function sub(a,b){ }
add.call(sub, 3, 1);//alert 4
/**
* call 的意思是把 animal 的ShowName方法放到cat上执行;所以运行结果为:alert('Cat');
*/ function Animal(name){
this.name = 'Animal';
this.ShowName = function(){
alert(this.name);
}
}
function Cat(name){
this.name = "Cat";
}
var animal = new Animal();
var cat = new Cat(); animal.ShowName.call(cat);
/**
* Animal.call(this) 的意思就是使用 Animal对象代替this对象,那么 Cat中不就有Animal的所有属性和方法了吗,Cat对象就能够直接调用Animal的方法以及属性了.
* */
function Animal(name,name2){
this.name = name;
this.name2 = name2;
this.ShowName = function(){
alert(this.name);
alert(this.name2);
}
}
function Cat(name1,name){
Animal.call(this,name1,name);
}
var cat = new Cat('我是老虎','我是病猫'); cat.ShowName();
/**
* Class2同时继承Class10和Class11
* */ function Class10()
{
this.ShowSub = function(a,b){
alert(a-b);
}
} function Class11()
{
this.ShowAdd = function (a,b){
alert(a+b);
}
} function Class2()
{
Class10.call(this);
Class11.call(this);
}
var cls2 = new Class2();
cls2.ShowSub(5,2);//alert(3)
cls2.ShowAdd(7,2);//alert(9)
接下来是apply的用法与理解
/**
*apply:方法能劫持另外一个对象的方法,继承另外一个对象的属性.
*call:和apply的意思一样,只不过是参数列表不一样.
* .call(obj, arg1, arg2, arg3, ...);
* .apply(obj,[arg1, arg2, arg3, ...])
*/
/ function Class10(name1,name2)
{
this.name1 = name1;
this.name2 = name2;
this.ShowName = function(){
alert('name1:' + this.name1);
alert('name2:' + this.name2);
}
} function Class11(name1,name2,age)
{
this.age = age;
Class10.apply(this,arguments);//此处,Class11劫持了Class10的属性[name1,name2,age]与方法ShowName();
this.ShowAge = function(){
alert('age:' + this.age);
}
} var cls = new Class11('名字1','名字2','好几岁了');
cls.ShowName();
cls.ShowAge();
代码大多是网上找的资料,然后自己随手做了一下小改动,测试通过,便于自己理解-w-
便于理解的格式:
父类.call(子类);
父类.apply(子类,arguments);
和C#相反:
class 子类 : 父类 { ... }
call与apply的区别的更多相关文章
- bind,apply,call区别总结
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- javascript中call()、apply()的区别
call().apply()的区别: 相同点: 1.call()和apply()都可以用来间接调用函数,都可以显式调用所需的this.即,锚点滑动任何函数可以作为任何对象的方法来调用. 2.两个方法都 ...
- SQL Server连接查询之Cross Apply和Outer Apply的区别及用法(转载)
先简单了解下cross apply的语法以及会产生什么样的结果集吧!示例表: SELECT * FROM tableA CROSS APPLY tableB 两张表直接连接,不需要任何的关联条件,产生 ...
- call apply bind 区别?
call apply bind 区别? 例:定义一个计算器,没绑定bind的为公共计算器,call可以调用,绑定bind的为私人计算器,别人调用不了, //ps:用bind绑定的call强制作借用不好 ...
- js中call与apply的区别以及使用~
今天看了一下call与apply的区别~~ <!DOCTYPE html> <html> <head> <title>testCall</titl ...
- js中的call,apply,bind区别
在JavaScript中,call.apply和bind是Function对象自带的三个方法,这三个方法的主要作用是改变函数中的this指向. call.apply.bind方法的共同点和区别:app ...
- SQLServer连接查询之Cross Apply和Outer Apply的区别及用法
https://blog.csdn.net/wikey_zhang/article/details/77480118 先简单了解下cross apply的语法以及会产生什么样的结果集吧! 示例表: S ...
- bind、call、apply的区别与实现原理
1.简单说一下bind.call.apply的区别 三者都是用于改变函数体内this的指向,但是bind与apply和call的最大的区别是:bind不会立即调用,而是返回一个新函数,称为绑定函数,其 ...
- call, apply, bind 区别
#call, apply, bind 区别及模拟实现call apply bind 三者都可以用来改变this的指向,但是在用法上略有不同 首先说一下call和apply的区别 call和apply ...
- 探索 Reflect.apply 与 Function.prototype.apply 的区别
探索 Reflect.apply 与 Function.prototype.apply 的区别 众所周知, ES6 新增了一个全局.内建.不可构造的 Reflect 对象,并提供了其下一系列可被拦截的 ...
随机推荐
- Codevs 1222 信与信封问题 二分图匹配,匈牙利算法
题目: http://codevs.cn/problem/1222/ 1222 信与信封问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 ...
- cloudstack安装篇2-主机名配置
CloudStack要求正确配置主机名.在默认情况下,安装完操作系统后,主机名是localhost.localdomain.运行下面的命令来测试: hostname --fqdn 在此处将返回这样的结 ...
- vim中不能使用“+y拷贝
新的机器上安装vim后可以使用yy复执,但是”+y拷贝到系统剪切板不行.按下面操作解决: 1.首先要检查你的vim版本是否支持+clipboard,命令是:version 或者可以输入:reg 查看是 ...
- HDU4607 - Park Visit(树的直径)
题目大意 给定一颗树,要求走过其中连续的k个点,使得步数最少 题解 每条边要么经过两次,要么一次,因为我们的目标就是使得走一次的边尽量的多,这样就转换成求树的直径了,求树的直径我用的是两次dfs,先随 ...
- unexpected error ConnectionError object has no attribute
unexpected error ConnectionError object has no attribute
- Yii Listview 更新及搜索
更新: http://my.oschina.net/shixiaobao17145/blog/130992 http://www.yiiframework.com/forum/index.php/to ...
- 2016/9/7 jdbc.properties配置数据库相关
##MySQL#jdbc.driver=com.mysql.jdbc.Driver#jdbc.url=jdbc:mysql://localhost:3306/test#jdbc.username=ro ...
- JavaScript- 获得TreeView CheckBox里选中项的值
获得TreeView CheckBox里选中项的值,对JSDOM控制还不是很熟,感觉不太容易.试了很多次终于成功了. 代码如下 <body> <form id="form1 ...
- ASM集群文件系统ACFS(ASM Cluster File System)
在11g R2中ASM文件支持包括数据文件,控制文件,归档日志文件,spfile,RMAN备份文件,Change Tracking文件,数据泵Dump文件盒OCR文件等.而推出的ACFS和Oracle ...
- STM32 驱动12864液晶显示汉字、图片、画点、横线、竖线、斜线
我做本实验的软件平台为MDK软件,选用STM32VET6,12864液晶屏5v供电采用并行接法.之前本来想网上找一个现成的程序实验一下,但都没找到合适的,于是就自己编写了一个,最终可在12864液晶屏 ...