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

JS apply()与call()

时间:2016-07-30 22:30:43      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:

函数的属性和方法

JS中的函数是对象,因此函数也有属性和方法。

 

每个函数都包含两个属性:length和prototype。

length属性,表示函数希望接收的命名参数的个数。

prototype属性,是保存它们所有实例方法的真正所在。

在ECMAScript5中,prototype属性是不可枚举的。

 

每个函数都拥有两个非继承而来的方法:apply()和call()。

这两个方法的用途都是在特定的作用域中调用函数;实际上等于设置函数体内this对象的值。

 

apply()方法接收两个参数:一个是在其中运行函数的作用域;另一个是参数数组(可以是Array实例,也可以是arguments对象)。

call()方法接收两个参数:一个是在其中运行函数的作用域;另一个是传递给函数的参数(必须逐一列举)。

apply()方法与call()方法的区别仅仅在于接收参数的方式不同。

 

apply()和call()真正强大的地方在于能够扩充函数赖以运行的作用域。

 1 window.color = "red";
 2 var o = {
 3     color : "green"
 4 };
 5 function sayColor() {
 6     console.log(this.color);
 7 };
 8 sayColor();               //"red"
 9 sayColor.call(this);      //"red"
10 sayColor.call(window);    //"red"
11 sayColor.call(o);         //"green"

 

使用apply()和call()来扩充作用域的最大好处,就是对象不需要与方法有任何耦合关系。

两个方法都允许显式地指定调用所需的this值,也就是说,任何函数都可以作为任何对象的方法来调用,哪怕这个函数根本不是那个对象的方法。

 

ECMAScript5中还定义了一个方法:bind();这个方法会创建一个函数的实例,其this值会被绑定到传给bind()函数的值。

例如:

1 window.color = "red";
2 var o = {
3     color : "green"
4 };
5 function sayColor() {
6     console.log(this.color);
7 };
8 var x = sayColor.bind(o);
9 x();    //"green"

 

JS apply()与call()

标签:

原文地址:http://www.cnblogs.com/cc156676/p/5721756.html

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