ES6:class类详解

1. class创建

  	// 1) 创建类 class
    class Person {

    }
    // 2)利用类创建对象 new 
    new Person();

2. 类:constructor构造函数


    // constructor()方法是类的构造函数(默认方法),用于传递函数,返回实例对象,通过new命令生成对象实例时,
    //自动调用该方法。如果没有显示定义,类内部会自动给我们创建一个constructor()
    
    class Person {
        constructor(name) {
            this.name = name;
        }
    }
    // 调用的时候一定要加new,一调用就会自动执行constructor构造函数
    let str = new Person('张三')
    console.log(str.name);

    let p = class Father {
        constructor(name, age) {
            this.name = name;
            this.age = age;
        }
        sing() {
            console.log('就是要唱歌');
        }
    }

    let obj1 = new p()
    console.log(p.name);  // Father
    console.log(p.age);  // undefined
    console.log(p.sing());  // 报错
    obj1.sing(); //  就是要唱歌
总结:
    1. 通过class关键字创建类,类名我们还是习惯性定义首字母大写;
    2. 类里面有个constructor函数,可以接受传递过来的参数,同时返回实例对象;
    3. constructor函数只要new生成实例时,就会自动调用这个函数,如果我们不写这个函数,也会自动生成这个函数;
    4. 生成实例new不能省略;
    5. 注意语法规范,创建类时,类名后面不要加小括号,生成实例类后面加小括号,构造函数不需要加function;
    6. 类表达式也可以定义类,类表达式可以命名或不命名,命名表达式的名称是该类题的局部名称。

3. 类中添加方法

   1. 类中的所有函数都不需要加function;
   2. 多个函数方法之间不需要逗号分割,不然会报错;
   3. 方法还可以传递函数,类中的公有属性是放到constructor里面的,调用的时候一定要加new,一调用就会自动执行constructor构造函数。
   class Person {
       constructor(name) {
           this.name = name;
        }
        sing(param) {
            console.log(this.name + param);
        }
    }

    let p = new Person('张三');
    p.sing('-----暗里着迷')

4. 类的继承

    class Father {
       constructor() {

       }
       sing() {
            console.log('就是要唱歌');
       }
    }

    class Son extends Father {

    }

    let son = new Son();
    son.sing();  // 就是要唱歌

5. super关键字

 1. super关键字用于访问和调用对象父类上的函数;
 2. 也可以调用父类的构造函数,也可以调用父类的普通函数;
 3. 需要注意的是:子类在构造函数中使用super时,必须放到this前面。
	class Person {
      constructor(name, age) {
           this.name = name;
           this.age = age;
            
        }
        say() {
           console.log(this.name + ":" + this.age);
        }
    }
    class Student extends Person {
        constructor(name, age, sex) {
           super(name, age);
            this.sex = sex;
            // console.log(this);
        }
    }
    var student = new Student("admin", 12, "male");
    student.name;   //'admin'
    student.sex;    //'male'
    student.say(); //'admin:12'
        总结:继承中,如果实例化子类输出一个方法,先看子类有没有这个方法,如果有就先执行子类的,如果子类里面没有,就去查找父类有没有这个方法, 如果有,就执行父类的这个方法(就近原则)

6. static

static只能通过类来访问,即static只能通过类自身来调用,不能通过类的实例来调用
 	class Father {
        constructor(name, age) {
            this.name = name;
            this.age = age;
        }
        sing() {
            console.log(this);
            console.log(this.name + '就是要唱歌');
        }
        static fb() {
            console.log(this.name);
        }
    }
    Father.song = function() {
        console.log(this.name);
    }

    let obj2 = new Father('张三', 28)
    obj2.sing();
    // obj2.song();  // 报错
    // obj2.fb();  // 报错
    Father.song();  // Father
    Father.fb(); // father

7. 注意事项:

 1. 在ES6中类没有变量提升,所以必须先定义类,才能通过类实例化对象;
 2.类里面的共有的属性和方法一定要加this使用;
 3. 类里面this的指向问题;
 4. constructor里面的this指向实例对象方法。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ES6中的class可以让我们更方便地定义和面向对象的编程模式。下面是一些关于ES6 class的详细解释: 1. 定义 使用class关键字定义一个名通常首字母大写。例如: ``` class Person { constructor(name, age) { this.name = name; this.age = age; } sayHello() { console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`); } } ``` 上面的代码定义了一个Person,包含一个构造函数和一个sayHello方法。 2. 构造函数 中的构造函数使用constructor关键字定义,用于初始化对象的属性。例如: ``` class Person { constructor(name, age) { this.name = name; this.age = age; } } ``` 上面的代码定义了一个Person,包含一个构造函数,构造函数接收name和age两个参数,并将其分别赋值给对象的name和age属性。 3. 方法 中的方法可以像普通函数一样定义,例如: ``` class Person { constructor(name, age) { this.name = name; this.age = age; } sayHello() { console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`); } } ``` 上面的代码定义了一个Person,包含一个sayHello方法,该方法用于打印对象的name和age属性。 4. 继承 ES6中的class支持继承,使用extends关键字实现继承。例如: ``` class Student extends Person { constructor(name, age, grade) { super(name, age); this.grade = grade; } study() { console.log(`${this.name} is studying in grade ${this.grade}.`); } } ``` 上面的代码定义了一个Student,该继承自Person,包含一个构造函数和一个study方法。构造函数接收name、age和grade三个参数,其中name和age由父的构造函数初始化,grade由子的构造函数初始化。 5. 静态方法 中的静态方法使用static关键字定义,可以直接通过名调用,例如: ``` class MathUtils { static add(x, y) { return x + y; } static subtract(x, y) { return x - y; } } ``` 上面的代码定义了一个MathUtils,包含两个静态方法add和subtract,这两个方法可以直接通过名调用。 6. 属性 ES6中的class支持定义属性,可以使用get和set关键字定义属性的读写方法。例如: ``` class Person { constructor(name, age) { this._name = name; this._age = age; } get name() { return this._name; } set name(name) { this._name = name; } get age() { return this._age; } set age(age) { this._age = age; } } ``` 上面的代码定义了一个Person,包含两个属性name和age,这两个属性的读写方法分别由get和set关键字定义。注意,属性名前面加上了一个下划线,这是一种约定俗成的做法,用于表示私有属性,防止属性被直接访问。 7. 静态属性 ES6中的class支持定义静态属性,使用static关键字定义静态属性。例如: ``` class MyClass { static myStaticProperty = 42; } ``` 上面的代码定义了一个MyClass,包含一个静态属性myStaticProperty,该属性的初始值为42。 总结: ES6中的classJavaScript提供了更加完整和规范的面向对象编程模式,支持继承、静态方法、属性等等。使用class可以让我们更方便地定义和对象,提高代码的可读性和维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端~初学者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值