原型

作者: Hello杨先生 | 来源:发表于2019-06-28 13:52 被阅读1次

    前提:原型是一个对象,其他对象可以通过他来实现属性继承,除了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

    相关文章

      网友评论

        本文标题:原型

        本文链接:https://www.haomeiwen.com/subject/zfbjcctx.html