call和apply到底有啥用

     为什么有这两个函数呢?们到底可以做什么?


mozilla官方的文档让我看到了一点端倪:

1、call函数可以让你从已有的对象中继承一个方法,而不必为新对象写一个新的方法

With call, you can write a method once and then inherit it in another object, without having to rewrite the method for the new object.
文档中的例子说明了这一点:
function Product(name, value){
   this.name = name;
   if(value >= 1000)
      this.value = 999;
   else
      this.value = value;
}
 
function Prod_dept(name, value, dept){
   this.dept = dept;
   Product.call(this, name, value); //这里this对象调用Product方法,以帮助实现Prod_dept方法。
}
 
Prod_dept.prototype = new Product(); 

cheese = new Prod_dept("feta", 5, "food");

car = new Prod_dept("honda", 5000, "auto");
 今天我又看到了一个call的用途

2、明确指出函数调用的上下文。

没错,有时候在函数调用的过程中,转来转去常常会让this迷失方向,call和apply函数则可以明确指出此函数调用的this对象是谁。

        例子如下:

 

var first_object = {
num: 42
};
var second_object = {
num: 24
};

function multiply(mult) {
return this.num * mult;
}

multiply.call(first_object, 5); // 返回 42 * 5
multiply.call(second_object, 5); // 返回 24 * 5
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值