call方法的官方解释为:
调用一个对象的一个方法,以另一个对象替换当前对象。
call([thisObj[,arg1[, arg2[,   [,.argN]]]]])

参数
thisObj
可选项。将被用作当前对象的对象。

arg1, arg2, , argN
可选项。将被传递方法参数序列。

说明
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。

如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

================================================================================================================================

apply方法的官方解释为:
应用某一对象的一个方法,用另一个对象替换当前对象。
apply([thisObj[,argArray]])

参数
thisObj
可选项。将被用作当前对象的对象。

argArray
可选项。将被传递给该函数的参数数组。

说明
如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。

如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。

从上面官方的介绍可以看出,两者实现的功能是完全一样的,只是参数传递方式不一样,call是将各个参数以“,”隔开,而apply是将所有参数组成一个数组进行传递。

举例来说明两个方法的用法:
function funa() {
   this.o = "I'm string o";
   this.i = "I'm string i";
   //未定义this.u,但调用的是funb里面的,所以定不定义都无所谓;
   this.fun = function(t,z) {
       var s = "this.o: " + this.o + "\nthis.i: " + this.i + "\nthis.u: " + this.u + "\nt: " + t + "\nz: " + z;
       alert(s);
   }
}

function funb() {
   this.o = "I'm other string o";
   //未定义this.i,所以返回undefined
   this.u = "I'm string u";
}

var a = new funa();
var b = new funb();

/*
运行a对象的fun方法时,将a的this转为b对象的this
因此funa里面的this.o实际是funb里面的this.o
*/
a.fun.call(b,"1st arg","2nd arg");

从上面的例子可看出:
obj1.method1.call(obj2,argument1,argument2)
简单的说就是把obj1的方法放到obj2上使用,后面的argument1..这些做为参数传入

继承实现

  1. #我的见解:

function a(v){  this.a=v;  }  functionb(v){  this.b="test2";   a.apply(this,new Array(v)); //apply意思是将a对象的属性方法应用于()里的对象,参数传递通过第二个数组参数}  varc=newb();  alert(c.a);  alert(c.b);

转载:http://hi.baidu.com/jctr/blog/item/1eb4f0366f02ac300b55a96c.html

转载于:https://blog.51cto.com/liushan/375847

JavaScript中的 apply 与 call 方法相关推荐

  1. 如何在JavaScript中使用apply(?),call(?)和bind(➰)方法

    by Ashay Mandwarya ?️?? 由Ashay Mandwarya提供吗? 如何在JavaScript中使用apply(?),call(?)和bind(➰)方法 (How to use ...

  2. 什么是在JavaScript中扩展错误的好方法?

    本文翻译自:What's a good way to extend Error in JavaScript? I want to throw some things in my JS code and ...

  3. 在JavaScript中复制数组的最快方法-切片与“ for”循环

    本文翻译自:Fastest way to duplicate an array in JavaScript - slice vs. 'for' loop In order to duplicate a ...

  4. JavaScript 中call apply 那点简单事

    谈谈JavaScript 中call apply 那点简单事 平常是否遇到过call apply 的问题 比如说 怎么利用call.apply来求一个数组中最大或者最小值 如何利用call.apply ...

  5. php节点对象,JavaScript_JavaScript中访问节点对象的方法有哪些如何使用,JavaScript中访问节点对象的方法 - phpStudy...

    JavaScript中访问节点对象的方法有哪些如何使用 JavaScript中访问节点对象的方法有哪些? var obj = document.getElementById('fdafda'); va ...

  6. java中字符串和数组如何比较_[Java教程]javascript中数组和字符串的方法比较

    [Java教程]javascript中数组和字符串的方法比较 0 2016-07-19 23:00:05 ×目录[1]可索引 [2]转换 [3]拼接[4]创建[5]位置 前面的话 字符串和数组有很多的 ...

  7. JavaScript中的 inludes 和 indexOf 方法 | 判断字符串或数组中是否存在对应的元素| 相同点与不同点 | 代码详解

    目录 JavaScript中的inludes和indexOf方法 1.数组中的includes和indexOf方法比较 1.1 函数返回值的不同 1.2 函数第二个参数--开始查找的位置 1.3 in ...

  8. html escape函数,JavaScript中escape()函数的使用方法

    导语:我们在传递参数时,为了避免服务器端出现乱码,常常会要用到编码函数,urlencode.HtmlEncode.base64_encode等.本文给大家详细讲解JavaScript中escape() ...

  9. java apply 函数_Js(Javascript)中的apply方法的使用

    Function.apply(obj,args)方法能接收两个参数,简单说apply方法作用就是给类或方法中的this赋值.所以学会这个方法首先要知道this的作用.(this的用法可以看一下这个链接 ...

最新文章

  1. Init进程和进程 ④
  2. 打印当前时间 毫秒_时间轮定时器
  3. fpga芯片架构设计与实现 pdf_FPGA设计的8大重要知识点,你都get了吗
  4. php 剪贴板,之Windows中的剪贴板
  5. MySQL-02:“数据库”操作基本命令及权限笔记
  6. 阿里云天池 Python训练营Task2: Python基础练习:数据结构大汇总 学习笔记
  7. ASP.NET 2.0中实现模板中的数据绑定
  8. 钩子教程 - 原理(一)
  9. JSP和JSTL获取服务器参数
  10. 袖珍计算器c语言设计源码,VB程序题:编一模拟袖珍计算器的完整程序,界面如下图所示。要求:输入两个操作数和一个操作符,根据操作符决定所做的运算。 VB源码 龚沛曾...
  11. PJzhang:QQ输入法用户许可协议和隐私政策阅读
  12. cruzer php sandisk 闪迪u盘量产工具_sandisk cruzer 32G U盘量产工具下载
  13. webofscience入口注册_Web Of Science数据库免费检索入口,SCI论文期刊数据库免费入口...
  14. python绘制图像频谱_python傅里叶变换FFT绘制频谱图
  15. 算高差改正数的计算机程序,水准测量中测量高差的改正数怎么计算?
  16. 360安全软件设置白名单
  17. python对比两张图片的不同并圈起来,比较两幅图像/图片,并标记差异
  18. java实现图片反色
  19. UWB隧道人员定位技术-隧道定位监测系统-工地人员定位-新导智能
  20. 【zz北邮人】[经历][完稿]cs硕士妹子找工作经历【阿里人搜等互联网】

热门文章

  1. Python精通-Python字典操作
  2. java标签库jstl-el表达式介绍使用配置手册_JAVA EE 实验报告EL表达式和jstl标签库的使用...
  3. Nginx [emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)
  4. Linux的Makefile简单实例教程
  5. mysql使用技巧,使用Mysql的小技巧总结
  6. 【1】Docker概述
  7. 关于Spring的几个问题
  8. java中来获取UUID
  9. Redis的安装与使用
  10. 一个计算两个日期间隔的算法