funktsiyasi withEZDebug < C uzaytiradi ClassConstructor > ( sinf : C ) {
qaytish sinf uzaytiradi Sinf {
disk raskadrovka() {
ruxsat bering Ism = Sinf . konstruktor . nomi ruxsat bering qiymat = bu . getDebugValue ()
qaytish Ism + '(' + JSON . stringify ( qiymat ) + ')'
}
}
}
Lekin kuting! Biz uni chaqira olishimiz uchun sinf .getDebugValue usulini qo'llashiga qanday ishonch hosil qilishimiz mumkin? Davom etishdan oldin bu haqda bir soniya o'ylab ko'ring - buni tushuna olasizmi?
EZDebug ga o'tgan sinf .getDebugValue usulini belgilashiga ishonch hosil qilish uchun umumiy turdan foydalanamiz :
turi ClassConstructor < T > = yangi (... args : har qanday []) => T
funktsiyasi withEZDebug < C uzaytiradi ClassConstructor < { getDebugValue () : ob'ekt } > > ( sinf : C ) { // ...
}
Aralashmalar
ClassConstructor ga umumiy turdagi parametr qo'shamiz .
ClassConstructor C ga bog'laymiz , bu bilan biz withEZDebug ga o'tkazgan konstruktor hech bo'lmaganda .getDebugValue usulini belgilaydi.
Bo'ldi shu! Xo'sh, ushbu ajoyib disk raskadrovka yordam dasturidan qanday foydalanasiz? Xuddi shunday:
sinf HardToDebugUser { konstruktor ( xususiy identifikator : raqam , shaxsiy firstName : string , private familiya : string
) {} getDebugValue() { return { id : this.id ,
ism : this.firstName + '' + bu . familiya
}
}
}
ruxsat bering Foydalanuvchi = withEZDebug ( HardToDebugUser ) ruxsat bering foydalanuvchi = yangi Foydalanuvchi ( 3 , 'Emma' , 'Gluzman' )
foydalanuvchi . disk raskadrovka () // "User({"id": 3, "name": "Emma Gluzman"})'ga baho beradi
Ajoyib, to'g'rimi? Siz sinfga qanchalik ko'p miksinlarni qo'llashingiz mumkin, qanchalik boy va boyroq xatti-harakatlarga ega bo'lgan sinfni yaratmoqchi bo'lsangiz, barchasi xavfsiz tarzda. Miksinlar xatti-harakatni inkapsulyatsiya qilishga yordam beradi va qayta foydalanish mumkin bo'lgan xatti-harakatlarni aniqlashning ifodali usulidir.
Do'stlaringiz bilan baham: |