关于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 的原因吧

posted @ 2018-04-13 09:40  xyyyy  阅读(170)  评论(0编辑  收藏  举报