JavaScript之call实例详解

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实现了多继承

ClassC(){

ClassA.call(this,1,2);

ClassB.call(this);

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值