关键词

Javascript类定义语法,私有成员、受保护成员、静态成员等介绍

JavaScript类定义语法是一种创建类的方式,允许您定义类并定义其属性和方法。在JavaScript中,类定义是通过ES6提出的class关键字来完成的。类定义语法通常包含类的名称、构造函数和成员定义。

类的定义方式

类定义语法的一般格式是:

class MyClass {
    constructor(/* 构造函数参数 */) {
        // 构造函数初始化代码
    }

    // 成员方法
    myMethod() {
        // 方法代码
    }

    // getters 和 setters
    get myProp() {
        return this._myProp;
    }

    set myProp(value) {
        this._myProp = value;
    }
}

这里,我们使用class关键字定义了一个名为“MyClass”的类,其中包括构造函数和成员定义。

私有成员

在JavaScript中,类的成员可以是公共的、私有的或受保护的。

私有成员是不能被类外部访问的成员。在JavaScript中,我们可以使用Symbol类型来模拟私有成员。

下面是一个示例,其中定义了一个名为“MyClass”的类,其中包含私有成员“#myPrivateProp”和一个公共方法“myMethod”:

const myPrivateProp = Symbol('myPrivateProp');

class MyClass {
    constructor() {
        this[myPrivateProp] = '私有成员';
    }

    myMethod() {
        console.log(this[myPrivateProp]);
    }
}

const myInstance = new MyClass();

// 无法访问私有成员
console.log(myInstance.myPrivateProp);  // undefined

// 可以调用公共方法,通过方法可以访问私有成员
myInstance.myMethod();  // 输出:"私有成员"

在这个例子中,“#myPrivateProp”被定义为私有成员。私有成员通过在名称前面添加符号“#”来定义。在构造函数中,我们使用this[myPrivateProp]来访问私有成员。

受保护成员

受保护成员也是不能被类外部访问的成员。与私有成员不同,受保护成员可以在派生类中访问。

在JavaScript中,我们可以使用Symbol类型来模拟受保护成员。

下面是一个示例,其中定义了一个基类“MyClass”,以及一个派生类“MyDerivedClass”。基类中有一个受保护成员“#myProtectedProp”,派生类中可以访问并修改其值:

const myProtectedProp = Symbol('myProtectedProp');

class MyClass {
    constructor() {
        this[myProtectedProp] = '受保护成员';
    }
}

class MyDerivedClass extends MyClass {
    constructor() {
        super();
        this[myProtectedProp] = '修改受保护成员';
    }

    myMethod() {
        console.log(this[myProtectedProp]);
    }
}

const myDerivedInstance = new MyDerivedClass();

// 无法访问受保护成员
console.log(myDerivedInstance.myProtectedProp);  // undefined

// 可以调用公共方法,通过方法可以访问受保护成员
myDerivedInstance.myMethod();  // 输出:"修改受保护成员"

在这个例子中,“#myProtectedProp”被定义为受保护成员。在基类的构造函数中,我们使用this[myProtectedProp]来访问受保护成员。在派生类中,我们通过“super”关键字调用基类的构造函数,并且在构造函数中使用this[myProtectedProp]来修改受保护成员的值。在派生类中,我们可以访问受保护成员,或者定义一个公共方法来访问它。

静态成员

静态成员是属于类的成员,而不是属于类的实例的成员。可以使用类名称来访问它们,而不是使用类的实例名称。

在JavaScript中,我们可以使用“static”关键字来定义静态成员。

下面是一个示例,其中定义了一个名为“MyClass”的类,其中包含静态成员“myStaticProp”和一个公共方法“myMethod”:

class MyClass {
    static myStaticProp = '静态成员';

    myMethod() {
        console.log(MyClass.myStaticProp);
    }
}

const myInstance = new MyClass();

// 无法访问静态成员
console.log(myInstance.myStaticProp);  // undefined

// 可以直接使用类名访问静态成员
console.log(MyClass.myStaticProp);  // 输出:"静态成员"

// 可以通过实例访问静态成员
myInstance.myMethod();  // 输出:"静态成员"

在这个例子中,“myStaticProp”被定义为静态成员。静态成员通过在名称前面添加关键字“static”来定义。在公共方法中,我们使用类名称MyClass来访问静态成员。在实例中,我们可以通过类名称或实例名称访问静态成员。

以上是关于JavaScript类定义语法,私有成员,受保护成员和静态成员的介绍和示例说明。

本文链接:http://task.lmcjl.com/news/15876.html

展开阅读全文