JS 原型与原型链

一. 对象

          JS 原型与原型链

 二. 构造函数属性 constructor;

             每 一个对象都有constructor属性(构造函数属性),对象的constructor属性指向该对象的构靠函数(生成他的类)。

           1,普通对象.constructor==Object;  即a.constructor==Object;

          2,函数对象.constructor==该对象的构造函数; 即b.constructor==class;

                  JS 原型与原型链

                  输入结果

                    JS 原型与原型链

三. 原型对象 prototype

        JS 原型与原型链

     结论:

              1,普通对象没有prototype属性

            2,函数对象的prototype属性指向一个对象,名称叫做“原型对象”,最后一处的TRUE,也充分证明了原型对象就是一个对象。因为上面说过:函数对象.constructor==该对象的构造函数;


四. __proto__

               JS 在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做__proto__ 的内置属性,用于指向创建它的构造函数的原型对象。

               JS 原型与原型链

              输出结果

             JS 原型与原型链

       结论:非原型对象的__proto__属性指向构造函数的原型对象;

     那么原型对象的__proto__属性指向什么?

   JS 原型与原型链

通过上面的图,可以看出,实列对象:gaoliang.__proto__指向的是他的构造函数的原型对象,输出对象属性有560(上面测试中赋的值)

ren.prototype.__proto__则输出对象有V:1300,也就是Object的原型对象。不信的话,可以试下这个的打印,输入肯定是TURE   :      ren.prototype.__proto__==Object.prototype

  ren.__proto__ == Function.prototype ??????成立


Object与Function 是啥关系?

alert(Object.constructor == Function)//成立

alert(Object.__proto__ == Function.prototype)//成立,

结论:Object是Function的实例对象