0
点赞
收藏
分享

微信扫一扫

【JavaScript】ES5和ES6在在构造函数加类型的方式的区别

像小强一样活着 2022-04-13 阅读 95

ES5和ES6在在构造函数加类型方式与实现继承的区别

【浅说】JavaScript 语言中,生成实例对象的传统方法是通过构造函数,es6的class 的出现 基本上可以替代了es5的构造函数和原型,使之代码结构上更加简洁。

1.构造函数的写法跟传统的面向对象语言(比如 C++ 和 Java)差异很大,很容易让新学习js的程序员感到困惑。

2.ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。

3.新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。

ES5和ES6的不同之处

1、 系统库的引用

ES5中的引用需要先使用require导入包,成为对象,再去进行真正引用;而在ES6里,可以使用import直接实现系统库引用,不需要额外制作一个类库对象。

2、 导出及引用单个类

ES5中,要导出一个类给别的模块使用,一般通过module.exports来实现,引用时通过require方法来获取;而在ES6中,使用export default实现同样的功能,但要使用import方法来实现导入。

3、 ES5 和 ES6 继承的区别

ES5的类继承,构造函数继承和原型继承是分开的(两种不同的方式)。子类继承父类的时候,先创造子类的实例对象this,然后再将父类的属性和方法添加到this上面,然后再去继承原型链。

而ES6类继承机制完全和es5不一样,是调用super方法将父类的属性和方法加到this上面。在子类的构造函数中,只有调用super之后,才可以使用this关键字,否则会报错。这是因为子类的构建基于父类,只有super方法才能调用父类构造函数。

案例:

ES5

// 父类
    // 使用构造函数+原型的方式实现创建对象和继承
    // 继承一般就是:  复用父类构造函数    使用父类原型中的成员
        function Person(name, age) {
        this.name = name
        this.age = age
      }
      Person.prototype.say = function() {
        console.log(this.name, this.age)
      }

    // 子类  
    function Student(name, age, gender,matrimony){
        // 继承父类构造函数--调用父类构造函数
        // 使用上下文调用模式,改变Person构造函数中的this,
        // 让this指向当前的Student构造函数中的对象
        Person.call(this,name,age,matrimony) // 函数调用模式,函数中的this指向window
        this.gender = gender
        this.matrimony = matrimony
    }
    
    // 子类继承父类原型中的成员
    Student.prototype.say = Person.prototype.say

    // 创建子类对象并调用方法
    let stu = new Student('ldh', 22, '男','未婚')
    console.log(stu);

ES6

// 都要定义类型,实现构造函数的继承,和原型成员的继承
        class Person{
            // 添加构造函数--构造器:为对象初始化成员
            // 名称固定:constructor
            // 添加构造函数(构造器)
            constructor(name,age){
                this.name = name
                this.age = age
            }
            // 添加原型中的成员:直接写函数
            say(){
                console.log(this.name,this.age);
            }
        }
        // 继承语法:
        // class 子类 extends 父类 {}
        // extends特点:默认就会继承父类的构造器和原型中的成员
        // 子类继承父类,就会拥有父类中的所有成员
        class Student extends Person{
            constructor(name,age,gender,matrimony){
                // 调用super之后才可以去写其他代码
                super(name,age)
                this.gender = gender
                this.matrimony = matrimony
            }
        }
        let stu = new Student('lyf', 22, '女','未婚')
        console.log(stu);

希望以上内容可以对你有所帮助!

举报

相关推荐

es5和es6 的区别?

es5和es6的区别

JS中ES5和ES6的区别

ES5和ES6

ES5、ES6 创建对象区别

ES5及ES6

ES5和ES6新特性

0 条评论