码迷,mamicode.com
首页 > 移动开发 > 详细

call(),apply(),bind()

时间:2016-07-12 17:14:11      阅读:298      评论:0      收藏:0      [点我收藏+]

标签:

新手:在看Javascript高级程序设计时看到 每个函数都包含两个非继承而来的方法:apply()和call()。在ECMAScript5中还添加了一个方法bind()。

apply()方法与call()方法的作用其实是相同的,他们的区别在于接收参数的方式不同。对于call()方法要求参数都是直接传递给函数,而如果打算直接传入arguments对象或者包含函数中接收到的也是一个数组,那么使用apply()。

window.color = "red";

var o = { color : "blue"};

function sayColor(){

  alert(this.color);

}

sayColor();           //red

sayColor.call(o)       //blue

此例子的sayColor是在全局作用域中调用的,所以this.color会转换成对window.color的求值。而sayColor.call(o)中,this指向o对象所以结果为"blue"。

在网上看到的function add(a,b)  
{  
    alert(a+b);  
}  
function sub(a,b)  
{  
    alert(a-b);  
}  
 
add.call(sub,3,1);

这个例子中的意思就是用 add 来替换 sub,add.call(sub,3,1) == add(3,1) ,所以运行结果为:alert(4); // 注意:js 中的函数其实是对象,函数名是对 Function 对象的引用。

 

应该是对象sub调用了对象add的方法。

 

call(),apply(),bind()

标签:

原文地址:http://www.cnblogs.com/jyasq/p/5664065.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!