/**
* 用 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. window上使用GIT的个人经验(入门级)

    0.安装 使用google上的msysgit http://code.google.com/p/msysgit/downloads/list 尽量用最新版的吧 1.KEY 关于 key,.ssh里面的 ...

  2. NOIP2002 字串变换

    题二 字串变换 (存盘名: NOIPG2) [问题描述]: 已知有两个字串 A$, B$ 及一组字串变换的规则(至多6个规则): A1$ -> B1$ A2$ -> B2$ 规则的含义为: ...

  3. Cogs 97. [NOIP2007] 树网的核 Floyd

    题目: http://cojs.tk/cogs/problem/problem.php?pid=97 97. [NOIP2007] 树网的核 ★☆   输入文件:core.in   输出文件:core ...

  4. WordPress模版结构

    一套完整的WordPress模版应至少包括如下文件: style.css : 样式表文件 index.php : 首页模板 archive.php : 文章归档/分类目录模板 404.php : 40 ...

  5. 利用JDBC连接Eclipse和mySQL5.1.26数据库

    初学JDBC,看了看书,自己动手的时候还是有很多地方有问题,最终终于解决了实现了数据库的连接.现将整个步骤描述如下: 环境:mySQL5.1.26(win 32bit), Eclipse JavaEE ...

  6. 【转载】linux 技巧:使用 screen 管理你的远程会话

    转自:https://www.ibm.com/developerworks/cn/linux/l-cn-screen/ 总结 启动并进入一个screen会话:screen 或者 screen -S 名 ...

  7. CodeForces 352C. Jeff and Rounding(贪心)

    C. Jeff and Rounding time limit per test:  1 second memory limit per test: 256 megabytes input: stan ...

  8. 成都Uber优步司机奖励政策(2月21日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  9. 问题-"Record not found or changed by another user"

    回答1:===============================================================问题:clientdataset“Record not found ...

  10. C#编译器怎么检查代码是否会执行

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:C#编译器怎么检查代码是否会执行.