美文网首页
原型链的理解

原型链的理解

作者: May丶be | 来源:发表于2017-09-23 20:23 被阅读0次

    原型对象和函数三角形

    function Person(){};
    var p = new Person();
    //如图,构造函数的.prototype属性的值就是原型对象
    //实例对象是构造函数new出来的,该过程称为实例化
    //原型对象的.constructor属性的值就是构造函数
    //实力对象可以通过.__proto__属性访问到原型对象
    

    什么是原型?

    • 构造函数的prototype属性的值就是原型
    • 将公共的方法或属性放到原型对象中,能够解决方法重复浪费内存的问题
    • 给原型对象添加属性,实例对象可以直接使用
    • 原型的作用主要是继承
    • 原型的类型是Object

    .proto属性 与 .prototype属性

    • 主要区别:.proto是站在实例对象的角度访问原型对象;而.prototype是站在构造函数的角度访问原型对象;
    • .proto是非标准属性,由浏览器提供,不能用于生产环境中,主要用于辅助我们理解对象之间的关系

    .constructor属性

    • 每个原型对象都有一个对应的constructor属性
    • constructor描述的是创建原型对象的构造函数
    • 所以 p.constructor === Person 的结果为true

    什么是原型链?

    对象有原型对象,原型对象也是对象,所以原型对象也有原型对象,这样一环扣一环就形成了一条链式结构,叫做:原型链

    完整的原型链结构图

    function  Fn () {};
    var f = new Fn();
    //1.将函数看做构造函数
    //构造函数:Fn
    //实例对象:f
    //原型对象:Fn.Prototype
    
    function Fn () {};
    //2.将函数看做实例对象(函数可以这样创建:var Fn = new Function () {})
    构造函数:Function
    实例对象:Fn
    原型对象:Function.prototype
    
    var obj = new Object();
    //3.将Object看做构造函数
    构造函数:Object
    实例对象:obj
    原型对象:Object.prototype
    
    //4.将Object看做实例对象
    构造函数:Function
    实例对象:Object
    原型对象:Function.Object
    
    //5.将Function看做实例对象
    通过.__proto__访问到原型对象
    //注意:Function作为对象时,是Function作为构造函数时的实例对象,继承自Function.prototype;
    //即:Function.prototype === Function.__proto__
    
    image.png

    相关文章

      网友评论

          本文标题:原型链的理解

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