/**
* 用 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的区别的更多相关文章

  1. bind,apply,call区别总结

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  2. javascript中call()、apply()的区别

    call().apply()的区别: 相同点: 1.call()和apply()都可以用来间接调用函数,都可以显式调用所需的this.即,锚点滑动任何函数可以作为任何对象的方法来调用. 2.两个方法都 ...

  3. SQL Server连接查询之Cross Apply和Outer Apply的区别及用法(转载)

    先简单了解下cross apply的语法以及会产生什么样的结果集吧!示例表: SELECT * FROM tableA CROSS APPLY tableB 两张表直接连接,不需要任何的关联条件,产生 ...

  4. call apply bind 区别?

    call apply bind 区别? 例:定义一个计算器,没绑定bind的为公共计算器,call可以调用,绑定bind的为私人计算器,别人调用不了, //ps:用bind绑定的call强制作借用不好 ...

  5. js中call与apply的区别以及使用~

    今天看了一下call与apply的区别~~ <!DOCTYPE html> <html> <head> <title>testCall</titl ...

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

    在JavaScript中,call.apply和bind是Function对象自带的三个方法,这三个方法的主要作用是改变函数中的this指向. call.apply.bind方法的共同点和区别:app ...

  7. SQLServer连接查询之Cross Apply和Outer Apply的区别及用法

    https://blog.csdn.net/wikey_zhang/article/details/77480118 先简单了解下cross apply的语法以及会产生什么样的结果集吧! 示例表: S ...

  8. bind、call、apply的区别与实现原理

    1.简单说一下bind.call.apply的区别 三者都是用于改变函数体内this的指向,但是bind与apply和call的最大的区别是:bind不会立即调用,而是返回一个新函数,称为绑定函数,其 ...

  9. call, apply, bind 区别

    #call, apply, bind 区别及模拟实现call apply bind 三者都可以用来改变this的指向,但是在用法上略有不同  首先说一下call和apply的区别 call和apply ...

  10. 探索 Reflect.apply 与 Function.prototype.apply 的区别

    探索 Reflect.apply 与 Function.prototype.apply 的区别 众所周知, ES6 新增了一个全局.内建.不可构造的 Reflect 对象,并提供了其下一系列可被拦截的 ...

随机推荐

  1. 【JS】Intermediate8:jQuery:AJAX

    1.$.ajax is the main method, allowing you to manually construct your AJAX request 2.eg: gets some da ...

  2. uvalive 7331 Hovering Hornet 半平面交+概率期望

    题意:一个骰子在一个人正方形内,蜜蜂在任意一个位置可以出现,问看到点数的期望. 思路:半平面交+概率期望 #include<cstdio> #include<cstring> ...

  3. POJ2478 - Farey Sequence(法雷级数&&欧拉函数)

    题目大意 直接看原文吧.... The Farey Sequence Fn for any integer n with n >= 2 is the set of irreducible rat ...

  4. ios中view的生命周期

  5. 神奇的问题记录【SqlDataAdapter Fill DataSet】

    今天发现程序中有一张报表查询速度很慢[全条件要二分钟左右],查找相关原因,准备进行优化处理.注:报表调用存储过程,存储过程返回两个table就有以下神奇的故事: 直接将SQL语句在SSMS中执行发现全 ...

  6. Learning JavaScript Design Patterns The Singleton Pattern

    The Singleton Pattern The Singleton pattern is thus known because it restricts instantiation of a cl ...

  7. [struts2]struts结合ECharts的用法

    <script src="http://echarts.baidu.com/build/dist/echarts-all.js"></script> < ...

  8. 单片微机原理P2:80C51外部中断与定时器系统

    0. 外部中断 书上的废话当然是很多的了,对于中断我想大家应该早就有一个很直观的认识,就是"设置断点,执行外部外码,然后返回断点"这样的三个过程.中断给系统提供了一个良好的响应模式 ...

  9. 【开发工具 - Git】之Git常用命令汇总

    本文记录了Git Bash中的常用指令. 1       Git操作 git clone XXXXX:将GitHub项目XXXXX克隆到本地 git remote –v:查看远程连接信息 git ch ...

  10. android开源项目学习

    FBReaderJ FBReaderJ用于Android平台的电子书阅读器,它支持多种电子书籍格式包括:oeb.ePub和fb2.此外还支持直接读取zip.tar和gzip等压缩文档. 项目地址:ht ...