在 TypeScript 中,一个类(class
)可以拥有以下几种类型的属性:
-
实例属性(Instance properties):
- 这些属性是在类的构造函数中使用
this
关键字定义的。 - 每个实例都有自己独立的实例属性。
- 这些属性是在类的构造函数中使用
-
原型属性(Prototype properties):
- 这些属性是定义在类的原型对象上的,所有实例共享同一个原型对象。
- 可以通过类的方法定义(不使用
static
关键字)。
-
静态属性(Static properties):
- 这些属性是直接添加到类本身的,而不是类的实例。
- 通过使用
static
关键字定义。
-
私有属性(Private properties):
- 使用
private
关键字定义的属性,只能在类的内部访问。
- 使用
-
受保护属性(Protected properties):
- 使用
protected
关键字定义的属性,可以在类的内部和继承类中访问。
- 使用
-
只读属性(Readonly properties):
- 使用
readonly
关键字定义的属性,只能在初始化时设置值,之后不能更改。
- 使用
示例
class Example {
// 私有属性
private privateProperty: string;
// 受保护属性
protected protectedProperty: string;
// 只读属性
readonly readonlyProperty: string;
constructor(public name: string) {
// 实例属性
this.privateProperty = 'This is a private property';
this.protectedProperty = 'This is a protected property';
this.readonlyProperty = 'This is a readonly property';
}
// 原型方法
greet() {
console.log(`Hello, my name is ${this.name}`);
}
// 静态方法
static staticMethod() {
console.log('This is a static method.');
}
// 访问私有属性的方法
getPrivateProperty() {
return this.privateProperty;
}
}
// 创建实例
const instance = new Example('Alice');
// 访问实例属性
console.log(instance.name); // 输出: Alice
// 访问原型方法
instance.greet(); // 输出: Hello, my name is Alice
// 访问静态方法
Example.staticMethod(); // 输出: This is a static method.
// 访问私有属性
console.log(instance.getPrivateProperty()); // 输出: This is a private property
// 访问受保护属性(受保护属性不能在类外部访问,这里会报错)
// console.log(instance.protectedProperty); // 错误: Property 'protectedProperty' is protected and only accessible within class 'Example' and its subclasses.
// 访问只读属性
console.log(instance.readonlyProperty); // 输出: This is a readonly property
// 尝试修改只读属性(只读属性不能修改,这里会报错)
// instance.readonlyProperty = 'New value'; // 错误: Cannot assign to 'readonlyProperty' because it is a read-only property.
详细解释
-
实例属性:
- 定义:在类的构造函数中使用
this
关键字定义的属性。 - 访问:通过类的实例访问。
- 示例:
constructor(public name: string) { this.name = name; } const instance = new Example('Alice'); console.log(instance.name); // 输出: Alice
- 定义:在类的构造函数中使用
-
原型属性:
- 定义:通过类的方法定义(不使用
static
关键字),这些方法添加到类的原型对象上。 - 访问:通过类的实例访问。
- 示例:
greet() { console.log(`Hello, my name is ${this.name}`); } const instance = new Example('Alice'); instance.greet(); // 输出: Hello, my name is Alice
- 定义:通过类的方法定义(不使用
-
静态属性:
- 定义:使用
static
关键字定义,直接添加到类本身,而不是类的实例。 - 访问:通过类本身访问,而不是通过实例访问。
- 示例:
static staticMethod() { console.log('This is a static method.'); } Example.staticMethod(); // 输出: This is a static method.
- 定义:使用
-
私有属性:
- 定义:使用
private
关键字定义,只能在类的内部访问,外部无法直接访问。 - 访问:通过类内部的方法访问。
- 示例:
private privateProperty: string; constructor() { this.privateProperty = 'This is a private property'; } getPrivateProperty() { return this.privateProperty; } const instance = new Example('Alice'); console.log(instance.getPrivateProperty()); // 输出: This is a private property
- 定义:使用
-
受保护属性:
- 定义:使用
protected
关键字定义,可以在类的内部和继承类中访问。 - 示例:
protected protectedProperty: string; constructor() { this.protectedProperty = 'This is a protected property'; } // 受保护属性在子类中可以访问 class SubExample extends Example { logProtectedProperty() { console.log(this.protectedProperty); } } const instance = new SubExample('Alice'); instance.logProtectedProperty(); // 输出: This is a protected property
- 定义:使用
-
只读属性:
- 定义:使用
readonly
关键字定义,只能在初始化时设置值,之后不能更改。 - 示例:
readonly readonlyProperty: string; constructor() { this.readonlyProperty = 'This is a readonly property'; } const instance = new Example('Alice'); console.log(instance.readonlyProperty); // 输出: This is a readonly property
- 定义:使用
通过这种方式,我们可以看到在 TypeScript 类中定义和访问实例属性、原型属性、静态属性、私有属性、受保护属性和只读属性的方法。每种类型的属性有其特定的用途和访问方式。
标签:console,定义,instance,ts,name,访问,class,属性 From: https://www.cnblogs.com/jocongmin/p/18301601