javascript中的Function与function

来源:互联网 发布:米聊营销软件 编辑:程序博客网 时间:2024/04/20 13:49

由于我们平时都是习惯用function funcname(){}这种形式来声明function,但是他是怎么来的那,他既然是Object那和{}这样的Object又有哪些不同那。

先引用javascript语言精粹中的一句话:对象字面量产生的对象链接到Object.prototype,函数对象链接到Function.prototype


function Fucntion(){}

function是通过Function这个函数(typeof Function结果是function)制造出来的,在制造的时候js内部会给这个function一个prototype的属性,({constract:function})和上下文(就是函数的作用域,闭包的实现就是通过内部函数的作用域可以访问外部函数作用域,返回对外部函数作用域的访问权得以实现,有些扯远了-_-!!!)。function的prototype就是一个{}这样的Object。


Function.prototype

但是这个制造出来的function毕竟还是需要有function的功能,就好像function自己的prototype也会定义一些杂七杂八的属性或方法给自己的实例来使用。因此制造者(Function)本身的prototype(奇葩的是各种浏览器把Function.prototype描述成一个function,而且ie和chrome下面这个function的名字还不一样,说是function,但是不能new的睡觉)就包含一些function自身所使用的属性和方法(caller,call,apply...)


new function

function可以通过new得到function的实例对象,这个是{}不能做到的。,实例对象就引用Function的prototype(因此每个实例对象都会有constractor),而Function的prototype又引用Object的prototype,实现原型链。


最后再回到那句引用的话,我觉得函数对象链接到Function.prototype,对象字面量产生的对象链接到Object.prototype这样来说更符合顺序。Function把function制造出来,function的各种属性方法自然引用Function的prototype。function把实例制造出来,实例对象的各种属性方法自然引用function的prototype,然后就没有然后了:P。

原创粉丝点击