JS中的call()和apply()方法
来源:互联网 发布:tomcat的源码接收连接 编辑:程序博客网 时间:2024/06/05 07:56
方法定义
call
方法:
语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
定义:调用一个对象的一个方法,以另一个对象替换当前对象。
说明:call
方法可以用来代替另一个对象调用一个方法。call
方法可将一个函数的对象上下文从初始的上下文改变为由thisObj
指定的新对象。
如果没有提供thisObj
参数,那么Global
对象被用作 thisObj。apply
方法:
语法:apply([thisObj[,argArray]])
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
说明: 如果argArray
不是一个有效的数组或者不是arguments
对象,那么将导致一个 TypeError。
如果没有提供argArray
和thisObj
任何一个参数,那么Global
对象将被用作thisObj
, 并且无法被传递任何参数。
2、常用实例
a. call
<script> function add(a,b){ alert(a+b); } function sub(a,b){ alert(a-b); } add.call(sub,3,1); </script>
这个例子中的意思就是用 add
来替换 sub
,add.call(sub,3,1) == add(3,1) ,所以运行结果为:alert(4); // 注意:js 中的函数其实是对象,函数名是对 Function 对象的引用。
b、call和apply
<script> function Animal(){ this.name = "Animal"; this.showName = function(){ alert(this.name); } } function Cat(){ this.name = "Cat"; } var animal = new Animal(); var cat = new Cat(); //通过call或apply方法,将原本属于Animal对象的showName()方法交给对象cat来使用了。 //输入结果为"Cat" animal.showName.call(cat,","); //animal.showName.apply(cat,[]); </script>
call
的意思是把 animal
的方法放到cat
上执行,原来cat
是没有showName()
方法,现在是把animal
的showName()
方法放到 cat
上来执行,所以this.name
应该是Cat
c、实现继承
<script> function Animal(name){ this.name = name; this.showName = function(){ alert(this.name); } } function Cat(name){ Animal.call(this, name); } var cat = new Cat("Black Cat"); cat.showName(); </script>
Animal.call(this)
的意思就是使用 Animal
对象代替this
对象,那么 Cat
中不就有Animal
的所有属性和方法了吗,Cat
对象就能够直接调用Animal
的方法以及属性了.
d、多重继承
<script> 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); } </script>
很简单,使用两个 call
就实现多重继承了
当然,js的继承还有其他方法,例如使用原型链,这个不属于本文的范畴,只是在此说明call
的用法。说了call
,当然还有 apply
,这两个方法基本上是一个意思,区别在于call
的第二个参数可以是任意类型,而apply
的第二个参数必须是数组,也可以是arguments
,还有 callee
,caller
…
- JS中的apply方法和call方法
- js 中的 call() 方法 和 apply()方法
- js中的call()和apply()方法
- js中的apply()和call()方法详解
- JS中的call()和apply()方法
- JS中的call()和apply()方法
- JS中的call()和apply()方法
- JS中的call()和apply()方法
- JS中的call()和apply()方法
- JS中的call()和apply()方法
- JS中的call()和apply()方法
- JS中的call()和apply()方法
- JS中的call()和apply()方法
- JS中的call()和apply()方法
- JS中的call()和apply()方法
- JS中的call()和apply()方法
- JS中的call()和apply()方法
- JS中的call()和apply()方法
- gdb调试器的使用方法小结,转载版
- 蓝桥杯 ALGO-49 算法训练 寻找数组中最大值
- Android SQLite数据库中的日期函数总结
- Azure虚拟机磁盘扩展
- 编译链接过程
- JS中的call()和apply()方法
- Android7.0中文API -- TableLayout
- wireshark使用教程
- 蓝桥杯 ALGO-42 算法训练 送分啦
- 【ARM】移植linux kernel2.6.32注意事项
- 极光推送
- 【mysql】linux系统上安装mysql及mysql可视化工具安装
- 蓝桥杯 ALGO-5 算法训练 最短路
- php处理静态页面:页面设置缓存时间