javascript - چگونه میتوانم یک نمونه از کلاس Typescript را کپی کنم در حالی که برخی خصوصیات را تغییر میدهم؟
من یک کلاس تایپاسکریپت دارم:
class Cat {
constructor(
public name: string,
public age: number,
public color: string
) {}
}
const sophie = new Cat('Sophie', 17, 'black')
حالا میخواهم یک نسخه از نمونه بسازم، اما یک ویژگی را تغییر دهم. اگر این یک شیء واقعی بود، این کار ساده بود:
const tipper = {...sophie, name: 'Tipper'}
اما این یک نمونه از کلاس Cat ایجاد نمیکند. برای انجام این کار، باید هر ویژگی را بهطور طاقتفرسا فهرست کنم:
const Tipper = new Cat('Tipper', sophie.age, sophie.color)
آیا راه تمیزتری برای کپی کردن یک نمونه کلاس وجود دارد، نه شیء لغوی، در حالی که ویژگیهای انتخابشده را تغییر میدهیم؟
پاسخ شماره ۱
میتوانید یک متد کارخانهای ایستا ایجاد کنید که نمونهی جدیدی بر اساس شیء ارسالشده برگرداند
class Cat {
constructor(...) {...}
static fromObject({ name, age, color }) {
return new Cat(name, age, color)
}
}
و سپس شیء sophie را با name بهروزرسانیشده ارسال کنید:
const tipper = Cat.fromObject({ ...sophie, name: "Tipper" })
class Cat {
constructor(name, age, color) {
this.name = name;
this.age = age;
this.color = color
}
static fromObject({ name, age, color }) {
return new Cat(name, age, color)
}
}
const sophie = new Cat('Sophie', 17, 'black')
const tipper = Cat.fromObject({ ...sophie, name: "Tipper" })
console.log(tipper)
console.log(tipper instanceof Cat)یا
اگر میتوانید امضای سازنده را تغییر دهید، میتوانید یک شیء را مستقیماً به عنوان آرگومان بگیرید
class Cat {
constructor({ name, age, color }) {
...
}
}
new Cat({ ...sophie, name: "Tipper" })
class Cat {
constructor({ name, age, color }) {
this.name = name;
this.age = age;
this.color = color
}
}
const sophie = new Cat({ name: "Sophie", age: 17, color: "black" })
const tipper = new Cat({ ...sophie, name: "Tipper" })
console.log(tipper)
console.log(tipper instanceof Cat)