Javascript中的Function对象总结

属性

arguments

arguments是一个类似数组的对象, 对应于传递给函数的参数。
arguments对象是所有函数中可用的局部变量。你可以使用arguments对象在函数中引用函数的参数。此对象包含传递给函数的每个参数的条目,第一个条目的索引从0开始。

转换数组

arguments对象不是一个Array。它类似于数组,但除了长度之外没有任何数组属性。例如,它没有pop方法。但是它可以被转换为一个真正的数组:

1
2
3
let args = Array.prototype.slice.call(arguments); 

let args = [].slice.call(arguments);

你还可以使用Array.from()方法或spread运算符将arguments转换为真正的数组:

1
2
let args = Array.from(arguments);
let args = [...arguments];

属性

arguments.callee
指向当前执行的函数。
arguments.length
指向传递给当前函数的参数数量。

length

length是函数对象的一个属性值,指该函数有多少个必须要传入的参数,那些已定义了默认值的参数不算在内,比如function(xx = 0)length是0。与之对比的是,arguments.length是函数被调用时实际传参的个数。

Function构造器本身也是个Function。他的length属性值为 1 。该属性 Writable: false, Enumerable: false,Configurable: true

Function原型对象的length属性值为 0 。

方法

Function.prototype.apply()

apply()方法调用一个函数, 其具有一个指定的this值,以及作为一个数组(或类似数组的对象)提供的参数。

语法:

1
func.apply(thisArg, [argsArray])

参数

thisArg
func函数运行时指定的this值。需要注意的是,指定的this值并不一定是该函数执行时真正的this值,如果这个函数处于非严格模式下,则指定为nullundefined时会自动指向全局对象(浏览器中就是window对象),同时值为原始值(数字,字符串,布尔值)的this会指向该原始值的自动包装对象。
argsArray
一个数组或者类数组对象,其中的数组元素将作为单独的参数传给func函数。如果该参数的值为nullundefined,则表示不需要传入任何参数。从ECMAScript5开始可以使用类数组对象。浏览器兼容性请参阅本文底部内容。

描述

在调用一个存在的函数时,你可以为其指定一个this对象。this指当前对象,也就是正在调用这个函数的对象。 使用 apply, 你可以只写一次这个方法然后在另一个对象中继承它,`而不用在新对象中重复写该方法。

applycall非常相似,不同之处在于提供参数的方式。apply使用参数数组而不是一组参数列表(原文:a named set of parameters)。apply可以使用数组字面量(array literal),如 fun.apply(this, ['eat', 'bananas']),或数组对象, 如fun.apply(this, new Array('eat', 'bananas'))

你也可以使用arguments对象作为argsArray参数。arguments是一个函数的局部变量。它可以被用作被调用对象的所有未指定的参数。这样,你在使用apply函数的时候就不需要知道被调用对象的所有参数。 你可以使用arguments来把所有的参数传递给被调用对象。 被调用对象接下来就负责处理这些参数。

Function.prototype.call()

call()方法调用一个函数,其具有一个指定的this值和分别地提供的参数(参数的列表)。

注意:该方法的作用和apply()方法类似,只有一个区别,就是call()方法接受的是若干个参数的列表,而apply()方法接受的是一个包含多个参数的数组。

语法

1
func.call(thisArg[, arg1[, arg2[, ...]]])

参数

thisArg
func函数运行时指定的this值。需要注意的是,指定的this值并不一定是该函数执行时真正的this值,如果这个函数处于非严格模式下,则指定为nullundefinedthis值会自动指向全局对象(浏览器中就是window对象),同时值为原始值(数字,字符串,布尔值)的this会指向该原始值的自动包装对象。
arg1, arg2, ...
指定的参数列表。

返回值

返回结果包括指定的this值和参数。

描述

可以让call()中的对象调用当前对象所拥有的function。你可以使用call()来实现继承:写一个方法,然后让另外一个新的对象来继承它(而不是在新对象中再写一次这个方法)。