函数对象
函数也有方法和属性,可以把函数理解为一种特殊的对象,函数进行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]);