谈谈对javascript Function, Prototype, Constructor的理解

Function:

首先,javascript里除了几个基本的数据类型(数字,字符串,布尔值,null, undefined),其他所有的东西都是对象(object)。

我们都知道function是用来声明函数的操作符,javascript有个特别的Function对象,俗称函数对象, 所有通过funtion声明出的对象都是Function对象,包括Object, Array, Boolean, String等几个基本类型对象,这几个也是js中最主要的构造函数,都是自己专属的属性和方法

如Object对象

function Object(){
    [native code]      
}

Object instanceof Function //true

 

Prototype:

所有函数在function的时候都会构建出prototype属性,指向prototype对象,这个prototype对象主要起到传宗接代的作用。它包括一个私有的[[proto]]指针,在firefox, webkit里公开为__proto__,为什么叫指针,因为它不是自身的属性,这个主要起到认祖归宗的作用,它永远指向其构造者的prototype。

function A(){}
A.hasOwnProperty('__proto__')  //false
A.__proto__===Function.prototype  //true

但这个__proto__最终指向哪里呢?

Function.prototype.__proto__=== Object.prototype  //true
Object.prototype.__proto__=== null //true

 

Constructor:

字面理解上就是构建者,它指向其构建者,也就是创建了自己的东东,不管是什么。所以理论上任何东西都是有constructor的。

构造函数的构建者是Function, prototype的构建者是其构造函数,

a = new A();
a.constructor === A // true
Object.prototype.constructor === Object  //true
Object.constructor === Function  // true
Function.constructor === Function  // true

但为什么说理论上, 实际上Function对象是通过function声明出来的,它们的constructor只是指针,最终指向Function。 只有prototype才是被构建出来的,有constructor属性。

Function.hasOwnProperty('constructor') //false

Function.prototype.hasOwnProperty('constructor') //true

 

参考资料:

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object

 

没怎么写过博客,自认实用主义者,不搞学术研究,只是最近前端技术氛围太浓,忍不住才写几句,欢迎交流指正。

转载于:https://www.cnblogs.com/chunterg/archive/2013/05/18/3086216.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值