关于prototype以及__proto__的一些理解

prototype属性只有函数对象才拥有,可以称之为显性属性; __proto__每个对象都拥有包括函数对象,而这个称之为隐性属性。

function Lxy (){};  //一个构造函数

var b = new Lxy();// 这个时候 new做了几个步骤。

//1.  var b = {}   是个空对象(注意是个空对象!!),这也是为什么new出来的实例没有prototype属性(废话不是函数 当然没有prototype了);

//2.  b.__proto__ = Lxy.prototype  将b的原型对象指向 Lxy的原型。这也就是说 构造函数的 prototype指向可以理解为实例的原型对象指向

//3.Lxy.call(b)  让b继承Lxy prototype上的方法。

所以得出的结论可以理解为  : 函数的prototype指向是他的实例对象的__proto__指向

由此可以得出 Lxy.__proto__ == Function.prototype  //  true    如何理解呢?Lxy作为一个函数对象自然可以当成Function(底层封装的构造函数)的实例;

var a = 1; a.__proto__ == Number.prototype // true    a作为一个数字对象自然可以看成Number(底层封装的构造函数)的实例; 不信你可以试试Number()

var c = '1'; c.__proto__ == String.prototype  // true   理由同上......

然后又因为  Number,String,Object,Function等等等等都属于底层的构造函数(个人理解。。。。。)

所以 他们都可以理解为 Function 的实例对象

所以 Object.__proto__ == Function.prototype;   // true

        Number.__proto__ == Function.prototype // true

  Function.__proto__ == Function.prototype  //true    

最后又根据万物皆对象。 所以 Function.prototype.__proto__  == Object.prototype   //   true    把Function.prototype 看做一个对象理解  他是根据Object实例出来的。(这不是跟Object.__proto__ == Function.prototype 相互打脸了吗。js是真的神奇 各种打我的脸,估计是我哪里理解没到位,怎么理解?????? .....日后搞懂了来回答

记住一切的源头就是null   Object.prototype.__proto__  == null 这也就是为什么 typeof null 是object 的原因吧

转载于:https://www.cnblogs.com/xyyyy/p/8818252.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值