看下面这段代码很难把function与一个object相联系在一起,以为object最本质key/value没有体现出来:
var greet = function(){
alert('Heloo, my friend.');
}
在这里所创建的function只是包裹了statement,然后可以执行的代码罢了.好像根本和object没关系啊.
但是function在JS中确实表现的跟普通的object没区别. 可以作为变量的值,可以存在object,array中.可以当做函数的参数.可以被其他函数当做值返回.function还可以有方法(method).问题就出在当function作为一个可以被调用的东西时我们就觉得function不是object了.就是以上那个例子.
那么到底如何来解释function也是一个object么.
其实每个function创建时都和两个看不见的属性息息相关: 1)the function's context 2)the code that implements the function's behavior.
每个function创建时都会有一个prototype属性.你可以这样拿到它:
greet.prototype
// Object {}
greet.prototype.constructor
// function(){alert('Hello, my friend');}
它的值是一个object.这个object有一个名为constractor
的key,值是这个function本身.(注:这里的prototype和Function.prototype有所不同)
如果一个function使用关键词 new来调用,会新创建一个object,这个object会有秘密的链接到function的prototype.this
值会绑定到这个新创建的object上.