函数
- 函数也是一个对象,事实上,JS拥有函数的类型,可以通过
var fun=new Function(args,fun_body)
的形式定义一个函数。函数作为一个对象,有所有对象所共有的性质,同时,函数还有一个特性:可以被调用执行。 - 函数作为一个对象的方法
一个疑点:当函数作为一个对象的方法时,函数的函数名还是否有意义?因为一般函数作为对象的方法之后,对函数的引用都是通过对象的方法名的。
首先,明确一点,函数的函数名是自己本身拥有的属性,无论外部使用情况如何不会改变。形如
function Q(){
this.setQ=function(){};
}
的对象,内部的函数是没有函数名的(每一个函数有一个name
的属性保存自己的函数名,匿名函数的name
是“”),而对象的方法setQ
引用了这个匿名函数,这是两个部分。
之后,我们继续函数当作对象的方法后,函数名还有没有用的讨论。
当函数在形如
function Q(){
this.setQ=function set(){};
}
中set
的形式中时,不再是匿名函数,拥有函数名,通过函数名set
,函数可以与setQ这个对象属性区别开,但是与正常声明的函数还是有些不同,比如函数名的作用域只限于set函数内部,其他地方引用set只会产生变量未定义错误。
之所以提这个点,是因为如下的使用情况:
var ninja={
chirp:function(){
//do something
}
}
var samurai={
chirp:ninja.chirp
}
在这种情况下,一个对象引用的另一个对象的方法作为自己的方法,那么,在chirp
内部,它如何引用自身呢?一种较为通用的解决方法是使用this指针,this指针是指向运行是调用函数的对象的指针,通过使用this.chirp
可以获得自身。第二种方式就是使用函数名,通过自己的函数名引用自身,确保函数可以找到自己。