JS基础(十八) ES6中定义类的新语法

<script>

        /* // 定义一个Person类型

        class Person{

            // 构造函数

            constructor(name,age,gender){

                this.name = name,

                this.age = age

                this.gender = gender

            }

            // 给类添加一个方法

            sayHi(){

                console.log(this.name,this.age,this.gender);

            }

            //用这种方式定义的方法,是将方法定义到类的原型对象中去

            sayHello(){

                console.log('hello!');

            }

        } */


        // 继承

        /* // ES5:

        // 定义一个人类

        function Person(name, age, gender) {

            this.name = name

            this.age = age

            this.gender = gender

        }

        Person.prototype.eat = function () {

            console.log(`我叫${this.name},我在吃饭...`);

        }

        Person.prototype.say = function () {

            console.log(`大家好!我叫${this.name} 今年${this.age}岁 性别是${this.gender}`);

        }

        // 通过Person类型,创建出了两个对象

        let p1 = new Person('刘德龙', 20, '男')

        p1.say()

        p1.eat()

        let p2 = new Person('高德政', 21, '男')

        p1.say()

        p1.eat()

        console.log('-------------------------------------');

        //定义了学生类

        function Student(name, age, gender, no) {

            // 继承Person类的属性

            Person.call(this, name, age, gender)

            // Student类特有的属性

            this.no = no

        }

        // 给Student类的prototype属性 new 一个Person类型的对象

        // 用于继承Person类的方法

        Student.prototype = new Person()

        Student.prototype.study = function () {

            console.log(`我叫${this.name},我的学号是${this.no},我在学习...`);

        }

        let s1 = new Student('张三', 20, '女', '1001')

        s1.study()

        s1.eat()

        s1.say() */


        // ES6:

        // 定义人类

        class Person {

            // 定义构造函数

            constructor(name, age, gender) {

                this.name = name

                this.age = age

                this.gender = gender

            }

            // 说话方法

            say() {

                console.log(`大家好!我叫${this.name} 今年${this.age}岁 性别是${this.gender}`);

            }

            // 吃方法

            eat() {

                console.log(`我叫${this.name},我在吃饭...`);

            }

        }


        // 每个类型都一个prototype属性,我们称它为类的原型对象。

        // 类的原型对象中的成员,给类的所有实例(实例就是类创建出来的对象)共享

        console.log(Person.prototype);


        // 通过Person类型,创建出了两个对象

        let p1 = new Person('刘德龙', 20, '男')

        console.log(p1);

        p1.say()

        p1.eat()

        let p2 = new Person('高德政', 21, '男')

        console.log(p2);

        p1.say()

        p1.eat()


        console.log('-------------------------------------');


        // extends关键字,表示继承

        class Student extends Person{

            // 构造函数

            constructor(name, age, gender,no){

                // 调用父类的构造函数

                super(name, age, gender)

                // 学生特有的属性

                this.no = no

            }

            //学生学习的方法

            study(){

                console.log(`我叫${this.name},我的学号是${this.no},我在学习...`);

            }

        }

        let s1 = new Student('张三', 20, '女', '1001')

        console.log(s1);

        s1.study()

        s1.eat()

        s1.say()

</script>

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ES6 let + const 函数作用域function(){}var 可以重新赋值 会有变量提升 块作用域{}...
    楼水流云阅读 255评论 0 0
  • 一、初识JavaScript JavaScript 是 Web 的编程语言。 所有现代的 HTML 页面都使用 J...
    是阳仔啊阅读 539评论 0 0
  • ES6中定义类.继承以及对象的操作0712 1.定义类的不同 回顾一下以前学习的在ES6之前定义一个类(不明显,和...
    煤球快到碗里来阅读 484评论 0 0
  • ES6 1. var let const let,const具有块级作用域,不具有变量提升 const 用...
    Charlescat阅读 24,900评论 1 24
  • 十二、类和对象进阶2 1.自执行方法 定义一个自执行函数,函数定义完成后,自己执行一次,函数名可以省略,因为没有任...
    默默_01cf阅读 159评论 0 0