函数属性、方法和构造函数
JS中,函数是值,对函数执行typeof运算会返回function,但是函数是JS中特殊的对象,也可以拥有属性和方法。
length属性
函数体里面,arguments.length表示传入函数的实参个数,而函数本身的length有不同的含义。
函数的length属性是只读属性,表示函数实参的数量,这里的实参其实是形参,是函数定义时给出的实参个数,也是期望传入的实参个数。
check()的函数,比较arguments.length实参个数和arguments.callee.length期望传入实参个数,来判断所传入的实参个数是否正确。
prototype属性
每一个函数都包含一个prototype属性,这个属性是指向一个对象的引用,这个对象称为"原型对象"(prototype object)。
每一个函数都包含不同的原型对象,当函数用作构造函数的时候,新创建的对象会从原型对象上继承属性。
call()方法和apply()方法
我们可以将call()和apply()看做某个对象的方法。
待续。。。
bind()方法
这个方法主要作用就是将函数绑定至某个对象。当在函数f()上调用bind()方法并传入一个对象o作为参数,这个方法将返回一个新的函数。
toString()方法
和其他对象一样,函数也有toString()对象,返回一个字符串,类似[native code]字符串作为函数体。
8.7.6 Function()构造函数,很少用
通过Function()构造函数来定义函数:
与var fff=function(x,y){return x*y;}
可调用的对象
类数组对象并不是真正的数组,同样,可调用对象是一个对象,可以在函数调用表达式中调用这个对象,所有的函数都是可调用的,但并非所有的可调用对象都是函数。
IE8之前,实现了客户端方法Window.alert()和Document.getElementById(),这类调用很少。
检测一个对象是否是真正的函数对象,以下案例检测它的class属性: