/**
* 用 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. c#文件转化byte数组

    public static byte[] ReadFile(string fileName) { if (!File.Exists(fileName)) { throw new Exception(& ...

  2. about云开发虚拟化资源汇总,持续更新

    H3C实验手册H3C实验手册内容包括:1.帧中继典型配置举例一2.典型访问列表和地址转换综合应用配置案例3.交换机基本配置4.轮循DCC配置举例5.X.25典型配置举例6.MultiLink PPP配 ...

  3. MultiTouch camera controls source code

    http://www.jpct.net/wiki/index.php/MultiTouch_camera_controls MultiTouch camera controls This code w ...

  4. Dllimport函数時无法在Dll中找到的入口点

    今天開發客戶提供的一個dll時出現無法找到入口點問題,由於客戶也不能明確說明dll,所以一時不知道如何下手,經查詢後找到可通過vs自帶的dumpbin.exe查看. Dumpbin.exe位于 VS的 ...

  5. 有关window.location 对象

    之前在有关location的使用就一种方式给他的href赋值使页面跳转.今天看项目中的代码看到了一个不一样的用法 window.location.href = 'http://' + document ...

  6. NSDictionary或NSArray与JSON字符串相互转换

    在iOS 5 中,苹果引入了一个解析JSON串的NSJSONSerialization类.通过该类,我们可以完成JSON数据与NSDictionary和NSArray之间的转化. 以前,我记得我用的是 ...

  7. JS 创建对象的几种方式

    面向对象就是把属性和操作属性的方法放在一起作为一个相互依存的整体--对象,即拥有类的概念,基于类可以创建任意多个实例对象,一般具有封装.继承.多态的特性! ECMA-262把对象定义为:"无 ...

  8. JS获取浏览器可视区域尺寸

    本文所说的是浏览器窗口的可视区域大小,不是浏览器窗口大小,也非页面尺寸. 在没有声明DOCTYPE的IE中,浏览器显示窗口大小只能以下获取: document.body.offsetWidth doc ...

  9. 【转】基于RMAN实现坏块介质恢复(blockrecover)

    本文转自:乐沙弥的世界 对于物理损坏的数据块,我们可以通过RMAN块介质恢复(BLOCK MEDIA RECOVERY)功能来完成受损块的恢复,而不需要恢复整个数据库或所有文件来修复这些少量受损的数据 ...

  10. ubuntu压缩解压

    ubuntu安装解压rar   一般通过默认安装的ubuntu是不能解压rar文件的,只有在安装了rar解压工具之后,才可以解压.其实在ubuntu下安装rar解压工具是非常简单的,只需要两个步骤就可 ...