class继承,原型链

2017-11-13  本文已影响0人  秦小婕

1.构造函数,原型,实例之间的关系

每个构造函数都有一个原型对象(prototype属性),原型对象都包含一个指向构造函数的指针(prototype.constructor),实例包含一个指向原型对象的指针(_ proto _属性)

2.原型链

3.class中的原型

class中定义的方法,属性,都是在类的prototype属性上定义的

class Point {
    constructor() {
     }
    toString() {
    }
   toValue() {
   }
 }

// 等同于

 Point.prototype = {
   constructor() {},
   toString() {},
   toValue() {},
};

但是类内部定义的方法是不可枚举的。

4.class继承

注意:子类constructor中必须调用super(),才可以使用this;因为子类没有自己的this对象,而是继承父类的this对象,然后对其进行加工。这也是es6与es5继承上的区别。es5中,继承是先创建子类实例的this,在这个基础上添加父类的方法和属性。es6中是先创建父类实例对象的this,然后用子类的构造函数修改。

5.Object.getPrototypeOf( )

6.super用法

1). 当做函数调用时,代表父类的构造函数。

   class A {
     constructor() {
       console.log(new.target.name);
     }
  }
  class B extends A {
     constructor() {
       super();
     }
  }
  new A() // A
  new B() // B

super虽然代表了父类A的构造函数,但是返回的是子类B的实例,即super内部的this指的是B,因此super()在这里相当A.prototype.constructor.call(this)。
因此

2)super当做对象使用

7.类的prototype和proto属性

es5中每个对象都具有proto属性,它指向对应的构造函数的prototype属性。class具备protp属性和prototype属性。

8.extend继承目标

9.实例的proto属性

子列原型的原型,是父类的原型。同es5中的对象的proto属性指向构造函数的原型,一致。

10.原生构造函数的继承

原生构造函数有:Number(), Date(),RegExp(),Array(),String(),Error(),Function(),Object(),Boolean().es5中原生构造函数不能够继承,因为原生构造函数的this无法绑定,拿不到内部的属性。

上一篇下一篇

猜你喜欢

热点阅读