javascript中的Function与function

由于我们平时都是习惯用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。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值