继承

  • 原型链是实现继承的主要方法(_proto_的引用链), 即让一个引用类型继承另一个引用类型的属性和方法
原型链.png
  • 注意有三个关键词:
    • prototype 构造函数具有
    • constructor 原型对象具有
    • _proto_ 实例对象具有
原型对象、构造函数、实例对象.png

每个实例对象Object都有一个私有属性_proto_指向它的原型对象prototype。 该原型对象也有一个自己的原型对象,层层向上直到一个对象的的原型对象为null.
null没有原型,是原型链最后一个环节。

function SuperType(){ this.property=true; }  // 构造函数  对象   
          SuperType.prototype.getSuperValue=function(){return this.property;}
function SubType(){  }    //构造函数   对象
SubType.prototype = new SuperType();   //原型  此时的指针是[[prototype]]
var instance = new SubType();  //实例

[[prototype]]默认情况下不可以再被外部访问,但会被for..in等遍历原型链上可以被枚举的属性的时候访问

两个对象之间实现了继承,方式:创建`SuperType`的实例 及重定义`SubType.prototype` 。本质是重写了原型对象.png

结论:

  1. 创建一个函数,这个函数就立即拥有属性prototype。 即prototype属性存在函数中,指向的是原型对象
  2. 函数的prototype对象具有属性constructor, 且指向该函数自身
    fun.prototype.constructor === func 结论为 true
  3. 函数实例的contructor指向函数本身
    var obj = new Fuc(); obj.constructor == Func;
  4. JavaScript每个对象,都有一个内置的_proto_属性
    obj instanceof Func 结论为true
  5. JavaScript 对象的内部属性——_proto_属性,函数也是对象

原形脸最终指向

  • 函数对象的原型链最终指向Function prototype对象
  • 非函数对象的原型链最终指向Object prototype对象
  • Function prototype对象的_proto_属性也指向Object prototype对象
  • Object prototype对象的_proto_属性指向null
原型链的指向.png
函数F的原型链相关属性解释.png

创建对象

  • new方法构建
    • 分配内存作为新创建的对象
    • 将新创建的对象的_proto_属性指向函数F的原型对象
new方法创建实例,生成的原型链图.png
  • 对象字面量
    • 分配内存作为新创建的对象
    • 将新创建对象的_proto_属性指向Object prototype object
对象字面量创建实例对象,生成原型链图.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容