函数对象
函数也有方法和属性,可以把函数理解为一种特殊的对象,函数进行typeof操作返回的结果是function。 函数名就是函数对象的索引,通过函数名可以调用函数,通过函数名可以执行new操作创建一个对象。 字符串对象、数组对象可以通过通过Javascript语言内置的特定构造函数Array()、String()去创建。 使用function关键字可以创建各种各样自定义的构造函数,Array()、String()构造函数对比自己定义的构造函数而言 可以理解为专用的构造函数。
函数对象属性
arguments
函数对象的属性arguments是一个类似数组的对象,表示函数的参数,可以使用下标的方式访问参数,arguments和数组对象一样具有length属性。 可以查看下面代码,查看arguments的使用方式。
let X = 0;
function fun(a,b,c) {
//arguments[0]、arguments[1]、arguments[2]可以分别表示参数a,b,c。
let s = arguments[0] + arguments[1] + arguments[2];
document.write(s);
document.write("<br>");
for(let i =0;i<arguments.length;i++){ //arguments.length表示参数个数
X += arguments[i];
}
document.write(X);
document.write("<br>");
}
fun(1,2,3);
arguments使用范围是函数内,可以直接调用。arguments[1]表示函数第二个参数,不需要用“函数名.arguments[1]”的形式,就像全局对象的方法可以直接使用,可以省略全局对象。
| 属性 | 意义 |
| arguments.length | arguments对象长度,即函数参数个数 |
| arguments.callee | 指向函数,等价于函数名字,可以用来调用函数 |
length
函数对象和数组对象、字符串对象一样具有length属性,函数对象的length属性表示函数参数,可以在函数体外使用。执行语句“函数名.length”就可以返回函数参数个数, 无参函数返回0.
方法
call()
call()可以把一个对象的方法和属性绑定到另一个对象,另一个对象就具有了这个对象的方法和属性。
call的语法格式:对象名1.(对象名2,对象1的参数1,对象1的参数2....),表示把对象1绑定到对象2
function fun(a,b) {
}
obj = {
};
fun.call(obj,a,b);
参考前面的课程《继承》,可以把对象冒充方法案例代码中的第18行第19行代码删掉替换为
替换后的代码
//基类(霍去病、岳飞共同的属性)
function Base(){
this.nation = "汉";
this.country = "中国";
this.job = "军人";
}
//huo构造函数
function huo() {
Base.call(this);//
this.name = "霍去病";
this.dynasty = "汉";
}
//yue构造函数
function yue() {
Base.call(this);
this.name = "岳飞";
this.dynasty = "宋";
}
let extend1 = new huo();
let extend2 = new yue();
//页面显示对象extend1的dynasty属性值
document.write(extend1.dynasty);
document.write("<br>");
//页面显示对象extend2的country属性值
document.write(extend2.country);
document.write("<br>");
apply()
apply()和call()功能没有任何区别,区别在于格式稍有不同,原函数的参数a、b....,以数组的形式出现
function fun1(a,b) {
}
obj = {
};
fun.call(obj,[a,b]);