`
jingwei.yang
  • 浏览: 3167 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics