如何在 Typescript 中合并 class 个实例?
How to merge class instances in Typescript?
我有一个 class 这样的:
class Person {
private _age: number;
get age(): number {
return this._age;
}
set age(value: number) {
this._age = value;
}
}
还有一个 class 的实例:
let peter = new Person();
peter.age = 30;
我想通过简单地使用展开运算符来获得 class 的另一个实例:
let marc = {
...peter,
age: 20
}
但这不会导致 Person
的实例,而是导致没有 Person
的 getter 和 setter 的对象。
是否可以以某种方式合并 class 个实例,或者我是否需要为 mark
再次使用 new Person()
?
扩展语法应该生成普通对象,因此不适用。如果需要新的 class 实例,则应使用 new
创建。如果一个对象必须与其他属性合并,可以使用Object.assign
:
let marc = Object.assign(
new Person()
peter,
{ age: 20 }
);
由于 Object.assign
进程拥有可枚举的属性,结果可能是不希望的或意外的,具体取决于 class 内部结构;它会从 peter
.
复制 private _age
而不是 public age
在任何特殊情况下,class 应该实现像 clone
这样的实用方法,它知道 class 内部并正确地创建一个实例。
在 OOP 术语中,您不会在创建实例后定义属性,而是在 class
中定义它们
在您的示例中,Marc 和 Peter 都有年龄,因此您无需合并任何内容。您可以使用构造函数为该实例传递特定值:
let marc = new Person("marc", 20)
let peter = new Person("peter", 30)
class Person {
constructor(private name:string, private age:number){
console.log("I am " + this.name + " my age is " + this.age)
}
}
如果有一个 属性 除了 Marc 没有人有,那么你可以让 Marc 扩展 Person。
class Person {
}
class Marc extends Person {
car:string
}
我有一个 class 这样的:
class Person {
private _age: number;
get age(): number {
return this._age;
}
set age(value: number) {
this._age = value;
}
}
还有一个 class 的实例:
let peter = new Person();
peter.age = 30;
我想通过简单地使用展开运算符来获得 class 的另一个实例:
let marc = {
...peter,
age: 20
}
但这不会导致 Person
的实例,而是导致没有 Person
的 getter 和 setter 的对象。
是否可以以某种方式合并 class 个实例,或者我是否需要为 mark
再次使用 new Person()
?
扩展语法应该生成普通对象,因此不适用。如果需要新的 class 实例,则应使用 new
创建。如果一个对象必须与其他属性合并,可以使用Object.assign
:
let marc = Object.assign(
new Person()
peter,
{ age: 20 }
);
由于 Object.assign
进程拥有可枚举的属性,结果可能是不希望的或意外的,具体取决于 class 内部结构;它会从 peter
.
_age
而不是 public age
在任何特殊情况下,class 应该实现像 clone
这样的实用方法,它知道 class 内部并正确地创建一个实例。
在 OOP 术语中,您不会在创建实例后定义属性,而是在 class
在您的示例中,Marc 和 Peter 都有年龄,因此您无需合并任何内容。您可以使用构造函数为该实例传递特定值:
let marc = new Person("marc", 20)
let peter = new Person("peter", 30)
class Person {
constructor(private name:string, private age:number){
console.log("I am " + this.name + " my age is " + this.age)
}
}
如果有一个 属性 除了 Marc 没有人有,那么你可以让 Marc 扩展 Person。
class Person {
}
class Marc extends Person {
car:string
}