【一】Function 函数的相关属性
1.length 返回函数定义的参数个数。
function funcTest(x, y, z) {
console.log(arguments);
return x + y + z;
}
console.log(funcTest.length); //输出3
2.constructor 返回创建该对象的构造函数。
var objFunc = new funcTest(1, 2, 3);
console.log(funcTest.constructor);
3 .caller 返回调用当前函数的函数。
function A() {
return A.caller;
}
function B() {
return A();
}
console.log(B()); //返回B函数
console.log(A()); //返回 undefined ,因为此时没有外层函数调用 A 函数
4. arguments
函数执行时内置的arguments对象,该对象返回该函数的所有参数,是一个类似数组但不是数组的对象,说它类似数组是因为其具有数组一样的访问性质及方式,可以由arguments[n]来访问对应的单个参数的值,并拥有数组长度属性length。
function argumentsTest() {
console.log(arguments[2]); //输出 a
return arguments;
}
console.log(argumentsTest(1, 2, 'a', 'v')); //输出 [1,2,"a","v"]
5.callee
callee 属性是 arguments 对象的一个成员,该属性仅当相关函数正在执行时才可用,返回当前被调用函数的函数对象.
以下是利用callee 实现匿名函数的递归调用的例子。
(
function(count) {
if (count <= 3) {
console.log(count);
arguments.callee(++count);
}
}
)(0);//依次输出0,1,2,3
【二】Function 函数的相关方法
1.toString() 返回定义该Function对象的字符串。
function f1(a,b,c){
return a+b+c;
}
console.log(f1.toString());
2.valueOf() 返回Function对象本身。
console.log(f1.valueOf());
3. call 和 apply
调用一个对象的方法,用另一个对象替换当前对象。
语法 call(thisObj,arg1,arg2,arg3);
语法 apply(thisObj,[arg1,arg2,arg3])
它允许将函数的 this 对象从初始上下文变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,则 global 对象被用作 thisObj。
call与apply方法唯一不同的地方是,apply的第二个参数类型必须是Array,而call方法是将所有的参数列举出来,用逗号分隔。
var obg = {
name:'jun',
say:function(somebody,age){
return 'Hello '+somebody+' this is '+this.name+age;
}
}
console.log(obg.say('bobo',10));//输出 Hello bobo this is jun10
var obg1 = {
name:'obg1',
};
console.log(obg.say.call(obg1,'js',100)); // Hello js this is obg1100
console.log(obg.say.apply(obg1,['js',100])); // Hello js this is obg1100