Web前端之路让前端飞

原型

2019-06-28  本文已影响1人  Hello杨先生

前提:原型是一个对象,其他对象可以通过他来实现属性继承,除了prototype
注意:大多情况下proto可以理解为constructor的原型,表示为proto === constructor.prototype

 /*
        输出原型
        */
        function add(){
             alert("111");
         }
         console.dir(add);
        prototype: {constructor: ƒ}
        // prototype是函数才有的属性

           var arr = [];
           console.dir(arr);
        // //__proto__: Array(0)            //prototype是proto的原型
        // prototype: [constructor: ƒ, concat: ƒ, copyWithin: ƒ, fill: ƒ, find: ƒ, …]
        //  constructor: ƒ Array()   proto是构造器的原型
        //__proto__ 是每个对象都有的属性  ,不是一个规范属性,质数部分浏览器实现了此属性

       /**/
 //对应的标准属性=任何浏览器都识别的属性=[[Prototype]]
         var a ={};
        console.log(a.prototype);//undefined
        console.log(a.__proto__);//Object

        var b = function (){
            alert("bbb");
        }
         console.log(b.prototype);//Object
         console.log(b.__proto__);//ƒ () { [native code] }

原型的作用
共享数据,节省内存空间

构造原型和实例的关系
构造函数创建实例对象
构造函数里面的prototype属性指的是原型对象
原型对象里面有一个constructor构造器
constructor指向的是自己的构造函数
原型对象里面的方法被实例对象共享
实例对象里面有proto属性
proto指向他所在的构造函数的原型对象
所以实例对象能访问到原型对象里面的方法

构造函数可以实例化对象
构造函数中有一个属性叫prototype,是构造函数的原型的对象
构造函数的原型对象(prototype)中有一个构造器constructor
constructor构造器指向的是自己所在的原型对象所在的构造函数
实例对象的原型对象(__proto__)(若看到某一对象中有__proto__,那么当前对象就是实例对象 )
实例对象的原型对象指向的是该构造函数的原型对象
构造函数的原型对象(prototype)中的方法是可以被实例对象直接访问的
构造原型和实例的关系.png
上一篇下一篇

猜你喜欢

热点阅读