ES6中的类。

class基本语法

基本概述

在es5中,如果要生成实例对象是通过构造方法和原型的组合模式形成的。
而es6提供了更接近传统语言的方法。引入了class类的概念。由class类的关键字声明。

 class Person {
    
    
                x;
                y;
                //构造函数  
                //构造函数实在类被实例化的时候默认执行
                constructor(x, y) {
    
    
                    //初始化xy 属性值
                    this.x = x;
                    this.y = y;
                }
                toString() {
    
    
                    console.log(this.x + "/" + this.y);
                }
            }

            let people = new Person(0, 0);
            console.log(Person === Person.prototype.constructor)//true
            console.log(people.constructor);//指向的也是本身

constructor 指向类本身。

class中添加类

由于类的方法都定义在prototype对象上面,所以类的新方法可以添加在prototype对象上面。
Object.assign方法可以很方便地一次向类添加多个方法。

class Person{
    
    
    constructor(){
    
    
        
    }
}
Object.assign(Person.prototype, {
    
    
                tosleep() {
    
    

                }
            });

Class直接定义的方法之间不需要逗号分隔。

class中的constructor方法

constructor方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。一个类必须有constructor方法,如果没有显式定义,一个空的constructor方法会被默认添加。

class中原型链问题

 class animal {
    
    
                constructor() {
    
     }
            }

            let c1 = new animal();
            let c2 = new animal();
            c1.__proto__.sleep = function () {
    
     console.log("睡觉"); }
            console.log(c1.__proto__ === c2.__proto__);//true

修改一个子类对象,另一个子类对象同时修改。引用关系 。

class中getter和setter

{
    
    
            class Person {
    
    

                get name() {
    
    
                    return this._name;
                }
                set name(n) {
    
    
                    this._name = n;
                }
            }

            let people = new Person();
            people.name = "小花";
            console.log(people.name);//小花

class中类的属性名

{
    
    
            let method="work";
            class Person{
    
    
                constructor (){
    
    

                }
                [method](){
    
    

                }
            }

            let people=new Person()
            console.log(people);
        }

class类中的属性或者方法名称使用字面表示。

class中的属性方法

类中的方法分为静态和非静态。

如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”。

 class Person{
    
    
                static type="人";
                name;
                age;
                sex;
                constructor (n,a,s){
    
    
                    this.name=n;
                    this.age=a;
                    this.sex=s;
                }
                static huxi(){
    
    
                    console.log('都要呼吸');
                }
                sleep(){
    
    
                    console.log('睡觉');
                }

            }

            let stu=new Person('小黑',10,'男');
            let stu1=new Person('小滑',18,'女');
            console.log(stu);
            console.log(stu1);

            Person.huxi();
            console.log(Person.type);
        }

对象点属性和方法全是非静态的。
静态的属性和方法使用类名称调用。

猜你喜欢

转载自blog.csdn.net/weixin_46953330/article/details/119295551