call()方法是做什么用的呢?与其看枯燥的文字解释,还不如看看他都可以用来做些什么来的实惠!
但是还要大概知道一下比较好
function.call(thisobj,args…)
call将指定函数function作为thisobj对象的方法来调用,将参数args传递给function,返回值为function的返回值。
thisobj是调用function的对象,在函数主体内thisobj是this的值,若thisobj为null,就使用全局对象
1、
function
add(a,b){
alert(a+b);
}
function
sub(a,b){
alert(a-b);
}
add.call(sub,3,1);
|
解释:add方法作为sub对象(javascript中函数即为对象)的方法调用,结果为4
2、
function
Class1(){
this .name
= "class1" ;
this .showName
= function (){
alert( this .name);
}
}
function
Class2(){
this .name
= "class2" ;
}
var
c1 = new
Class1();
var
c2 = new
Class2();
c1.showName.call(c2);
|
解释:c1.showName方法作为c2对象的方法调用
Class2中并没有showName方法,使用call后,可以调用到c1中的showNam方法
3、
function
Product(name, price) {
this .name
= name;
this .price
= price;
if
(price < 0)
throw
RangeError( 'Cannot
create product "'
+ name + '"
with a negative price' );
return
this ;
}
function
Food(name, price) {
Product.call( this ,
name, price);
this .category
= 'food' ;
}
Food.prototype
= new
Product();
function
Toy(name, price) {
Product.call( this ,
name, price);
this .category
= 'toy' ;
}
Toy.prototype
= new
Product();
var
cheese = new
Food( 'feta' ,
5);
var
fun = new
Toy( 'robot' ,
40);
|
解释:这里的call用于连接另一个对象的constructor,有点像java中的super()。Food中的this指向Food的作用域,就相当于在Food作用域下调用Product函数.
4、
var
animals = [
{species:
'Lion' ,
name: 'King' },
{species:
'Whale' ,
name: 'Fail' }
];
for
( var
i = 0; i < animals.length; i++) {
( function
(i) {
this .print
= function
() {
console.log( '#'
+ i + '
'
+ this .species
+ ':
'
+ this .name);
}
}).call(animals[i],
i);
}
|
解释:这里的call用于调用匿名函数,匿名函数作为数组中的对象的方法进行调用
5、
function
Class1(){
this .showTxt
= function (txt){
alert(txt);
}
}
function
Class2(){
Class1.call( this );
}
var
c2 = new
Class2();
c2.showTxt( "cc" );
|
解释:这里利用call实现了继承
6、
function
ClassA(){
this .showSub
= function (a,b){
alert(a-b);
}
}
function
ClassB(){
this .showAdd
= function (a,b){
alert(a+b);
}
}
function
ClassC(){
ClassA.call( this );
ClassB.call( this );
}
|
解释:这里使用call实现了多继承
更多的继承方法可以参考我的另一篇文章Javascript面向对象编程整理
相关推荐
本文实例讲述了JavaScript继承与聚合。分享给大家供大家参考,具体如下: 一、继承 第一种方式:类与被继承类直接耦合度高 1. 首先,准备一个可以被继承的类(父类),例如 //创建一个人员类 function Person(name)...
本文实例讲述了javascript中this用法。分享给大家供大家参考,具体如下: JavaScript中的this含义非常丰富,它可以是全局对象,当前对象或者是任意对象,这都取决于函数的调用方式。函数有以下几种调用方式:作为...
本文实例讲述了JavaScript反射与依赖注入。分享给大家供大家参考,具体如下: 对于javascript中的反射的理解,一直都是认为,利用数组对回调函数进行保存,之后在适当的时刻利用call或是apply 方法,对回调进行调用...
函数方法(非继承)包括:apply()和call() 继承而来的函数方法:bind()、toString()、toLocaleString()、valueOf() 其他的目前不熟,后面再补充 1. 函数内部属性 在函数内部,有两个特殊的对象,arguments和this。...
call, apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例,也就是每个方法都有call, apply属性.既然作为方法的属性,那它们的使用就当然是...
本文实例讲述了ES6中javascript实现函数绑定及类的事件绑定功能的方法。分享给大家供大家参考,具体如下: 函数绑定 箭头函数可以绑定this对象,大大减少了显式绑定this对象的写法(call、apply、bind)。但是,箭头...
《精通JS脚本之ExtJS框架》附有配套光盘,提供了书中实例的源代码和视频教学文件。此外,读者还可以通过访问itzcn网站来获得即时在线帮助。 《精通JS脚本之ExtJS框架》可以作为Web开发的自学参考书,也可以作为...
《精通JS脚本之ExtJS框架》附有配套光盘,提供了书中实例的源代码和视频教学文件。此外,读者还可以通过访问itzcn网站来获得即时在线帮助。 《精通JS脚本之ExtJS框架》可以作为Web开发的自学参考书,也可以作为...
02 Form组件之详解字段 03 Form组件之常用标签示例 04 Form组件之动态绑定数据 第60章 Django序列化共6课 第61章 01 上节内容回顾 02 上传文件 03 制作上传按钮 04 Form组件上传文件 05 上传相关内容梳理 06 ...
call n.v.调用; 呼叫; [kɒ:l] circumstance n.事件(环境,状况) ['sә:kәmstәns] crash n.崩溃,破碎 [kræʃ] cohesion 内聚,黏聚,结合 [kәu'hi:ʒәn] (a class is designed with a single, well-focoused ...