从原型继承到ES6 class语法

原型

在面向对象的文章中提过的一种设计模式-组合使用构造函数模式和原型模式

function Person(name, age){
    this.name = name
    this.age = age
}
Person.prototype = {
    constructor: Person,
    sayName: function(){
        alert(this.name)
    }
}

构造函数用于定义实例属性,原型模式用于定义方法和共享属性

ES6引入了Calss这个概念,作为对象的模板,通过class关键字,可以定义类

上面的例子可以改写为

class Person {
    constructor(name, age){
        this.name = name
        this.age = age
    }
    //方法中间不需要逗号分割,加了会报错
    sayName(){
        alert(this.name)
    }
}
  1. 类的所有方法都定义在类的prototype上
  2. 添加新方法可以使用Object.assign方法
  3. 类内部的方法是不可枚举的

继承

常用的继承实现方式:

  • 属性的获取
    通过call改变作用域
function Male(name, age, sex){
    Person.call(this, name, age)
    this.sex = sex
}
  • 方法的获取
  Male.prototype = Object.create(Person.prototype)
  Male.prototype.constructor = Male

我们定义一个函数来实现方法的继承

function inherit(superType, subType){
    var _prototype = Object.create(superType.prototype)
    _prototype.constructor = subType
    subType.prototype = _prototype
}

ES6可以通过extends关键字实现继承

ES5 的继承,实质是先创造子类的实例对象this,然后再将父类的方法添加到this上面(Parent.apply(this))。ES6 的继承机制完全不同,实质是先将父类实例对象的属性和方法,加到this上面(所以必须先调用super方法),然后再用子类的构造函数修改this。

class A {}

class B extends A {
  constructor() {
    super();
  }
}
B.__proto__ === A // true
B.prototype.__proto__ === A.prototype // true
B.__proto__.__proto__ === A.__proto__   //true

子类的__proto__属性,表示构造函数的继承,总是指向父类。

子类prototype属性的__proto__属性,表示方法的继承,总是指向父类的prototype属性。

子类实例的__proto__属性的__proto__属性,指向父类实例的__proto__属性。也就是说,子类的原型的原型,是父类的原型。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • class的基本用法 概述 JavaScript语言的传统方法是通过构造函数,定义并生成新对象。下面是一个例子: ...
    呼呼哥阅读 4,240评论 3赞 11
  • 简介 Class可以通过extends关键字实现继承。 上面代码定义了一个ColorPoint类,该类通过exte...
    oWSQo阅读 805评论 0赞 1
  • 基本语法 简介 JavaScript语言中,生成实例对象的传统方法是通过构造函数. ES6提供更接近传统语言的写法...
    JarvanZ阅读 989评论 0赞 0
  • 农历里面,一交上冬至就算入九了,天气一下冷了许多,我整天都呆在家里不想出门。吃过晚饭,天很快就黑了下来,妻子在卧室...
    天空_7183阅读 573评论 0赞 0
  • 自己带完一届之后,学校安排自己从初二年级带。这一届自己得拿出点成绩来了。 初二的内容比较多。知识要点也是占中考60...

友情链接更多精彩内容