ES5继承

  1. function Person(name, age){
  2. this.name = name
  3. this.age = age
  4. }
  5. function Men(name,age){
  6. Person.call(this,name,age)
  7. //改变this 指针,并且继承它拥有的属性
  8. // this是有new Men 实例来的,实由子给父。
  9. }
  10. Person.prototype.say = function(){console.log('hello')}
  11. Men.prototype = Object.create(Person.prototype)
  12. //继承Person原型上的属性、方法。 Men.prototype._ proto_ = Person.prototype
  13. Men.prototype.constructor = Men
  14. // 再次指向自己,知道为啥要再指向自己么?
  15. const men = new Men('lilei',18)
  16. men instanceof Men // true
  17. instanceof作用就是检查后面Men.prototype 是否在前面对象的原型上出现过。出现过返回true
  18. men.__proto__ === Men.protype // true
  19. men.__proto__.__proto__ === Person.prototype // true

ES6继承

  1. // 定义父类
  2. class Person {
  3. constructor(name, age){
  4. this.name = name;
  5. this.age = age;
  6. }
  7. say(){
  8. console.log('hello')
  9. }
  10. }
  11. // 定义子类
  12. class Men extends Person { // 子类继承父类
  13. constructor(name, age){
  14. super(name, age); // 相当于Person.call(this,name,age)
  15. }
  16. }
  17. // 省略了子类的prototype来自父类的prototype
  18. // 省略了子类的构造函数再指向自己
  19. var men = new Men('jane',18);

继承中this 产生?class 对象是否可遍历? class 会提升?对象属性拦截??
es6 this 是由父类产生的,子类需要在conscturce 里调用super()子类才会拥有this
class 不存在变量提升,需要先定义再使用。
对象属性拦截 ? Proxy