JavaScriptã¯ããããã¿ã€ãç¶æ¿ã¢ãã«ã䜿çšããŸããåãªããžã§ã¯ãã¯ããããã¿ã€ããªããžã§ã¯ãã®ãã£ãŒã«ãïŒããããã£ïŒãšã¡ãœãããç¶æ¿ããŸãã
ãªããžã§ã¯ããäœæããããã®ãã³ãã¬ãŒããŸãã¯ã¹ããŒããšããŠJavaãŸãã¯Swiftã§äœ¿çšãããã¯ã©ã¹ã¯ãJavaScriptã«ã¯ååšããŸããããããã¿ã€ãã®ç¶æ¿ã«ã¯ãªããžã§ã¯ãã®ã¿ããããŸãã
ãããã¿ã€ãã®ç¶æ¿ã¯ãã¯ã©ã¹ç¶æ¿ã®å€å žçãªã¢ãã«ãæš¡å£ã§ããŸãããããè¡ãããã«ãES6ã¯ã¯ã©ã¹ããŒã¯ãŒããå°å ¥ããŸããïŒãããã¿ã€ãç¶æ¿ã®ããã®æ§æã·ã¥ã¬ãŒã
ãã®èšäºã§ã¯ãã¯ã©ã¹ã®æäœæ¹æ³ãåŠç¿ããŸããã¯ã©ã¹ããã®ãã©ã€ããŒãïŒãã©ã€ããŒãïŒããã³ãããªãã¯ïŒãããªãã¯ïŒãã£ãŒã«ããšã¡ãœãããå®çŸ©ããã€ã³ã¹ã¿ã³ã¹ãäœæããŸãã
1.å®çŸ©ïŒã¯ã©ã¹ããŒã¯ãŒã
classããŒã¯ãŒãã¯ãã¯ã©ã¹ãå®çŸ©ããããã«äœ¿çšãããŸãã
class User {
//
}
ãã®æ§æã¯ã¯ã©ã¹å®£èšãšåŒã°ããŸãã
ã¯ã©ã¹ã«ååããªãå ŽåããããŸããã¯ã©ã¹åŒã䜿çšããŠãã¯ã©ã¹ãå€æ°ã«å²ãåœãŠãããšãã§ããŸãã
const UserClass = class {
//
}
ã¯ã©ã¹ã¯ã¢ãžã¥ãŒã«ãšããŠãšã¯ã¹ããŒãã§ããŸããããã©ã«ãã®ãšã¯ã¹ããŒãã®äŸã次ã«ç€ºããŸãã
export default class User {
//
}
ååä»ããšã¯ã¹ããŒãã®äŸã次ã«ç€ºããŸãã
export class User {
//
}
ã¯ã©ã¹ã¯ã€ã³ã¹ã¿ã³ã¹ãäœæããããã«äœ¿çšãããŸããã€ã³ã¹ã¿ã³ã¹ã¯ãã¯ã©ã¹ã®ããŒã¿ãšããžãã¯ãå«ããªããžã§ã¯ãã§ãã
ã€ã³ã¹ã¿ã³ã¹ã¯ãnewïŒinstance = new ClassïŒïŒæŒç®åã䜿çšããŠäœæãããŸãã
Userã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
const myUser = new User()
2.åæåïŒã³ã³ã¹ãã©ã¯ã¿ãŒïŒïŒ
ã³ã³ã¹ãã©ã¯ã¿ãŒïŒparam1ãparam2ã...ïŒã¯ãã€ã³ã¹ã¿ã³ã¹ãåæåããã¯ã©ã¹å ã®ç¹å¥ãªã¡ãœããã§ããããã§ãã€ã³ã¹ã¿ã³ã¹ãã£ãŒã«ãã®åæå€ãèšå®ããã³æ§æãããŸãã
次ã®äŸã§ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒãååãã£ãŒã«ãã®åæå€ãèšå®ããŸãã
class User {
constructor(name) {
this.name = name
}
}
ã³ã³ã¹ãã©ã¯ã¿ãŒã¯ãthis.nameãã£ãŒã«ãã®åæå€ãèšå®ããããã«äœ¿çšããã1ã€ã®ãã©ã¡ãŒã¿ãŒnameãåããŸãã
ã³ã³ã¹ãã©ã¯ã¿ãŒã®ããã¯ãäœæãããã€ã³ã¹ã¿ã³ã¹ãæããŸãã
ã¯ã©ã¹ãã€ã³ã¹ã¿ã³ã¹åããããã«äœ¿çšãããåŒæ°ã¯ããã®ã³ã³ã¹ãã©ã¯ã¿ãŒã®ãã©ã¡ãŒã¿ãŒã«ãªããŸãã
class User {
constructor(name) {
name //
this.name = name
}
}
const user = new User('')
ã³ã³ã¹ãã©ã¯ã¿ãŒå ã®nameãã©ã¡ãŒã¿ãŒã®å€ã¯ãPechorinãã§ãã
ç¬èªã®ã³ã³ã¹ãã©ã¯ã¿ãŒãå®çŸ©ããªãå Žåãæšæºã®ã³ã³ã¹ãã©ã¯ã¿ãŒãäœæãããŸããããã¯ãã€ã³ã¹ã¿ã³ã¹ã«åœ±é¿ãäžããªã空ã®é¢æ°ã§ãã
3.ãã£ãŒã«ã
ã¯ã©ã¹ãã£ãŒã«ãã¯ãç¹å®ã®æ å ±ãå«ãå€æ°ã§ãããã£ãŒã«ãã¯2ã€ã®ã°ã«ãŒãã«åããããšãã§ããŸãã
- ã¯ã©ã¹ã€ã³ã¹ã¿ã³ã¹ãã£ãŒã«ã
- ã¯ã©ã¹èªäœã®ãã£ãŒã«ãïŒéçïŒ
ãã£ãŒã«ãã«ã¯ã次ã®2ã€ã®ã¬ãã«ã®ã¢ã¯ã»ã¹ããããŸãã
- ãããªãã¯ïŒãããªãã¯ïŒïŒãã£ãŒã«ãã¯ãã¯ã©ã¹å ãšã€ã³ã¹ã¿ã³ã¹ã®äž¡æ¹ã§äœ¿çšã§ããŸã
- ãã©ã€ããŒãïŒãã©ã€ããŒãïŒïŒãã£ãŒã«ãã¯ã¯ã©ã¹å ã§ã®ã¿ã¢ã¯ã»ã¹å¯èœã§ã
3.1ãã¯ã©ã¹ã€ã³ã¹ã¿ã³ã¹ã®ãããªãã¯ãã£ãŒã«ã
class User {
constructor(name) {
this.name = name
}
}
this.name = nameãšããåŒã¯ãã€ã³ã¹ã¿ã³ã¹ãã£ãŒã«ãåãäœæããããã«åæå€ãå²ãåœãŠãŸãã
ãã®ãã£ãŒã«ãã«ã¯ãããããã£ã¢ã¯ã»ãµãŒã䜿çšããŠã¢ã¯ã»ã¹ã§ããŸãã
const user = new User('')
user.name //
ãã®å Žåãnameã¯Userã¯ã©ã¹ã®å€éšããã¢ã¯ã»ã¹ã§ããããããããªãã¯ãã£ãŒã«ãã§ãã
ã³ã³ã¹ãã©ã¯ã¿ãŒå ã§æé»çã«ãã£ãŒã«ããäœæããå Žåããã¹ãŠã®ãã£ãŒã«ãã®ãªã¹ããååŸããããšã¯å°é£ã§ãããã®ããããã£ãŒã«ãã¯ã³ã³ã¹ãã©ã¯ã¿ãŒããååŸããå¿ èŠããããŸãã
æè¯ã®æ¹æ³ã¯ãã¯ã©ã¹ãã£ãŒã«ããæ瀺çã«å®çŸ©ããããšã§ããã³ã³ã¹ãã©ã¯ã¿ãŒãäœããããã¯é¢ä¿ãããŸãããã€ã³ã¹ã¿ã³ã¹ã«ã¯åžžã«åããã£ãŒã«ãã®ã»ããããããŸãã
ã¯ã©ã¹ãã£ãŒã«ããäœæããããã®ææ¡ã§ã¯ãã¯ã©ã¹å ã®ãã£ãŒã«ããå®çŸ©ã§ããŸããããã«ãããã§ãã£ãŒã«ãã«åæå€ãå²ãåœãŠãããšãã§ããŸãïŒ
class SomeClass {
field1
field2 = ' '
// ...
}
ãããªãã¯åãã£ãŒã«ããå®çŸ©ããŠãUserã¯ã©ã¹ã®ã³ãŒããå€æŽããŸãããã
class User {
name
constructor(name) {
this.name = name
}
}
const user = new User('')
user.name //
ãããã®ãããªãã¯ãã£ãŒã«ãã¯éåžžã«ãããããããã¯ã©ã¹ãäžç®èŠãã°ããã®ããŒã¿ã®æ§é ãç解ã§ããŸãã
ããã«ãã¯ã©ã¹ãã£ãŒã«ãã¯å®çŸ©æã«åæåã§ããŸãã
class User {
name = ''
constructor() {
//
}
}
const user = new User()
user.name //
ãªãŒãã³ãã£ãŒã«ããžã®ã¢ã¯ã»ã¹ãšãã®å€æŽã«å¶éã¯ãããŸãããã³ã³ã¹ãã©ã¯ã¿ãŒãã¡ãœãããããã³ã¯ã©ã¹ã®å€éšã§ããã®ãããªãã£ãŒã«ããèªã¿åã£ãŠå€ãå²ãåœãŠãããšãã§ããŸãã
3.2ãã¯ã©ã¹ã€ã³ã¹ã¿ã³ã¹ã®ãã©ã€ããŒããã£ãŒã«ã
ã«ãã»ã«åã䜿çšãããšãã¯ã©ã¹ã®å éšå®è£ ã®è©³çŽ°ãé衚瀺ã«ã§ããŸããã«ãã»ã«åãããã¯ã©ã¹ã䜿çšãã人ã¯èª°ã§ããã¯ã©ã¹ã®å®è£ ã®è©³çŽ°ã«ç«ã¡å ¥ãããšãªãããããªãã¯ã€ã³ã¿ãŒãã§ã€ã¹ã«äŸåããŸãã
ãããã®ã¯ã©ã¹ã¯ãå®è£ ã®è©³çŽ°ãå€æŽããããšãã«ç°¡åã«æŽæ°ã§ããŸãã
詳现ãé衚瀺ã«ããè¯ãæ¹æ³ã¯ããã©ã€ããŒããã£ãŒã«ãã䜿çšããããšã§ãããã®ãããªãã£ãŒã«ãã¯ãããããå±ããã¯ã©ã¹å ã§ã®ã¿èªã¿åãããã³å€æŽã§ããŸãããã©ã€ããŒããã£ãŒã«ãã¯ã¯ã©ã¹å€ã§ã¯å©çšã§ããŸããã
ãã£ãŒã«ãããã©ã€ããŒãã«ããã«ã¯ãååã®åã«ïŒèšå·ãä»ããŸãïŒäŸïŒ#myPrivateFieldïŒããã®ãããªãã£ãŒã«ããåç §ãããšãã¯ãæå®ããããã¬ãã£ãã¯ã¹ãåžžã«äœ¿çšããå¿ èŠããããŸãã
ååãã£ãŒã«ãããã©ã€ããŒãã«ããŸãããïŒ
class User {
#name
constructor(name) {
this.#name = name
}
getName() {
return this.#name
}
}
const user = new User('')
user.getName() //
user.#name // SyntaxError
#nameã¯ãã©ã€ããŒããã£ãŒã«ãã§ããUserã¯ã©ã¹å ã§ã®ã¿ã¢ã¯ã»ã¹ã§ããŸããgetNameïŒïŒã¡ãœããããããè¡ããŸãã
ãã ããUserã¯ã©ã¹ã®å€éšã§#nameã«ã¢ã¯ã»ã¹ããããšãããšãæ§æãšã©ãŒãã¹ããŒãããŸããSyntaxErrorïŒãã©ã€ããŒããã£ãŒã«ã '#name'ã¯ãå²ãã§ããã¯ã©ã¹ã§å®£èšããå¿ èŠããããŸãã
3.3ããããªãã¯éçãã£ãŒã«ã
ã¯ã©ã¹ã§ã¯ãã¯ã©ã¹èªäœã«å±ãããã£ãŒã«ããã€ãŸãéçãã£ãŒã«ããå®çŸ©ã§ããŸãããã®ãããªãã£ãŒã«ãã¯ãã¯ã©ã¹ãå¿ èŠãšããæ å ±ãæ ŒçŽããå®æ°ãäœæããããã«äœ¿çšãããŸãã
éçãã£ãŒã«ããäœæããã«ã¯ããã£ãŒã«ãåã®åã«staticããŒã¯ãŒãstaticmyStaticFieldã䜿çšããŸãã
æ°ããã¿ã€ããã£ãŒã«ããè¿œå ããŠããŠãŒã¶ãŒã®ã¿ã€ãïŒç®¡çè ãŸãã¯éåžžïŒãå®çŸ©ããŸããããéçãã£ãŒã«ãTYPE_ADMINããã³TYPE_REGULARã¯ããŠãŒã¶ãŒã®ã¿ã€ãããšã®å®æ°ã§ãã
class User {
static TYPE_ADMIN = 'admin'
static TYPE_REGULAR = 'regular'
name
type
constructor(name, type) {
this.name = name
this.type = type
}
}
const admin = new User(' ', User.TYPE_ADMIN)
admin.type === User.TYPE_ADMIN // true
éçãã£ãŒã«ãã«ã¢ã¯ã»ã¹ããã«ã¯ãã¯ã©ã¹åãšããããã£åã䜿çšããŸãïŒUser.TYPE_ADMINããã³User.TYPE_REGULARã
3.4ããã©ã€ããŒãéçãã£ãŒã«ã
éçãã£ãŒã«ããã¯ã©ã¹ã®å éšå®è£ ã®äžéšã§ããå ŽåããããŸãããã®ãããªãã£ãŒã«ããã«ãã»ã«åããã«ã¯ããããããã©ã€ããŒãã«ããããšãã§ããŸãã
ãããè¡ãã«ã¯ããã£ãŒã«ãåã®åã«ïŒïŒstaticïŒmyPrivateStaticFiledãä»ããŸãã
Userã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã®æ°ãå¶éãããšããŸãããã©ã€ããŒãéçãã£ãŒã«ããäœæããŠãã€ã³ã¹ã¿ã³ã¹ã®æ°ã«é¢ããæ å ±ãé衚瀺ã«ããããšãã§ããŸãã
class User {
static #MAX_INSTANCES = 2
static #instances = 0
}
name
constructor(name) {
User.#instances++
if (User.#instances > User.#MAX_INSTANCES) {
throw new Error(' User')
}
this.name = name
}
new User('')
new User('')
new User('') // User
éçãã£ãŒã«ãUserãïŒMAX_INSTANCESã¯ãèš±å¯ãããã€ã³ã¹ã¿ã³ã¹ã®æ°ãå®çŸ©ããUserãïŒInstancesã¯ãäœæãããã€ã³ã¹ã¿ã³ã¹ã®æ°ãå®çŸ©ããŸãã
ãããã®ãã©ã€ããŒãéçãã£ãŒã«ãã¯ãUserã¯ã©ã¹å ã§ã®ã¿äœ¿çšã§ããŸããå€çããã®äœãå¶çŽã«åœ±é¿ãäžããããšã¯ã§ããŸãããããã¯ãã«ãã»ã«åã®å©ç¹ã®1ã€ã§ãã
çŽ ã¬ãŒã³ïŒã€ã³ã¹ã¿ã³ã¹ã®æ°ã1ã€ã«å¶éãããšãã·ã³ã°ã«ãã³ãã¶ã€ã³ãã¿ãŒã³ã®èå³æ·±ãå®è£ ãåŸãããŸãã
4.æ¹æ³
ãã£ãŒã«ãã«ã¯ããŒã¿ãå«ãŸããŠããŸããããŒã¿ãå€æŽããæ©èœã¯ãã¯ã©ã¹ã®äžéšã§ããç¹å¥ãªé¢æ°ã§ããã¡ãœããã«ãã£ãŠæäŸãããŸãã
JavaScriptã¯ãã€ã³ã¹ã¿ã³ã¹ã¡ãœãããšéçã¡ãœããã®äž¡æ¹ããµããŒãããŸãã
4.1ãã€ã³ã¹ã¿ã³ã¹ã¡ãœãã
ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã®ã¡ãœããã¯ããã®ããŒã¿ãå€æŽã§ããŸããã€ã³ã¹ã¿ã³ã¹ã¡ãœããã¯ãéçã¡ãœããã ãã§ãªãä»ã®ã€ã³ã¹ã¿ã³ã¹ã¡ãœãããåŒã³åºãããšãã§ããŸãã
ããšãã°ããŠãŒã¶ãŒã®ååãè¿ãgetNameïŒïŒã¡ãœãããå®çŸ©ããŸãããã
class User {
name = ''
constructor(name) {
this.name = name
}
getName() {
return this.name
}
}
const user = new User('')
user.getName() //
ã¯ã©ã¹ã¡ãœããããã³ã³ã³ã¹ãã©ã¯ã¿ãŒã§ã¯ãããã¯äœæãããã€ã³ã¹ã¿ã³ã¹ãæããŸããããã䜿çšããŠãã€ã³ã¹ã¿ã³ã¹ããŒã¿ãååŸããïŒthis.fieldããŸãã¯ã¡ãœãããåŒã³åºãïŒthis.methodïŒïŒã
1ã€ã®åŒæ°ãåããå¥ã®ã¡ãœãããåŒã³åºãæ°ããã¡ãœããnameContainsïŒstrïŒãè¿œå ããŸãããã
class User {
name
constructor(name) {
this.name = name
}
getName() {
return this.name
}
nameContains(str) {
return this.getName().includes(str)
}
}
const user = new User('')
user.nameContains('') // true
user.nameContains('') // false
nameContainsïŒstrïŒã¯ã1ã€ã®åŒæ°ãåãUserã¯ã©ã¹ã®ã¡ãœããã§ããå¥ã®ã€ã³ã¹ã¿ã³ã¹ã¡ãœããgetNameïŒïŒãåŒã³åºããŠããŠãŒã¶ãŒåãååŸããŸãã
ã¡ãœããã¯ãã©ã€ããŒãã«ããããšãã§ããŸããã¡ãœããããã©ã€ããŒãã«ããã«ã¯ãïŒãã¬ãã£ãã¯ã¹ã䜿çšããŸãã
getNameïŒïŒã¡ãœããããã©ã€ããŒãã«ããŸãããïŒ
class User {
#name
constructor(name) {
this.#name = name
}
#getName() {
return this.#name
}
nameContains(str) {
return this.#getName().includes(str)
}
}
const user = new User('')
user.nameContains('') // true
user.nameContains('') // false
user.#getName // SyntaxError
#getNameïŒïŒã¯ãã©ã€ããŒãã¡ãœããã§ããnameContainsïŒstrïŒã¡ãœããå ã§ã¯ã次ã®ããã«åŒã³åºããŸããïŒGetNameïŒïŒã
ãã©ã€ããŒãã§ãããããïŒgetNameïŒïŒã¡ãœãããUserã¯ã©ã¹ã®å€éšã§åŒã³åºãããšã¯ã§ããŸããã
4.2ãã²ãã¿ãŒãšã»ãã¿ãŒ
ã²ãã¿ãŒãšã»ãã¿ãŒã¯ãã¢ã¯ã»ãµãŒãŸãã¯èšç®ãããããããã£ã§ãããããã¯ãã£ãŒã«ããæš¡å£ããã¡ãœããã§ãããããŒã¿ã®èªã¿åããšæžã蟌ã¿ãå¯èœã«ããŸãã
ã²ãã¿ãŒã¯ããŒã¿ãåä¿¡ããããã«äœ¿çšãããã»ãã¿ãŒã¯ããŒã¿ãå€æŽããããã«äœ¿çšãããŸãã
ååãã£ãŒã«ãã«ç©ºã®æååãå²ãåœãŠãããªãããã«ããã«ã¯ããã©ã€ããŒã#nameValueãã£ãŒã«ããã²ãã¿ãŒãšã»ãã¿ãŒã§ã©ããããŸãã
class User {
#nameValue
constructor(name) {
this.name = name
}
get name() {
return this.#nameValue
}
set name(name) {
if (name === '') {
throw new Error(' ')
}
this.#nameValue = name
}
}
const user = new User('')
user.name // ,
user.name = '' //
user.name = '' //
4.3ãéçã¡ãœãã
éçã¡ãœããã¯ãã¯ã©ã¹èªäœã«å±ããé¢æ°ã§ãããããã¯ãã€ã³ã¹ã¿ã³ã¹ã§ã¯ãªããã¯ã©ã¹ã®ããžãã¯ãå®çŸ©ããŸãã
éçã¡ãœãããäœæããã«ã¯ãã¡ãœããåã®åã«staticããŒã¯ãŒãã䜿çšããŸãïŒstatic myStaticMethodïŒïŒã
éçã¡ãœããã䜿çšããå ŽåãèŠããŠããã¹ã2ã€ã®ç°¡åãªã«ãŒã«ããããŸãã
- éçã¡ãœããã¯éçãã£ãŒã«ãã«ã¢ã¯ã»ã¹ã§ããŸã
- ã€ã³ã¹ã¿ã³ã¹ãã£ãŒã«ãã«ã¢ã¯ã»ã¹ã§ããŸãã
æå®ããååã®ãŠãŒã¶ãŒããã§ã«äœæãããŠããããšã確èªããéçã¡ãœãããäœæããŸãããã
class User {
static #takenNames = []
static isNameTaken(name) {
return User.#takenNames.includes(name)
}
name = ''
constructor(name) {
this.name = name
User.#takenNames.push(name)
}
}
const user = new User('')
User.isNameTaken('') // true
User.isNameTaken('') // false
isNameTakenïŒïŒã¯ããã©ã€ããŒãéçãŠãŒã¶ãŒã䜿çšããéçã¡ãœããã§ããïŒtakenNamesãã£ãŒã«ãã䜿çšããŠã䜿çšãããååãå€å¥ããŸãã
éçã¡ãœããã¯ãã©ã€ããŒãã«ããããšãã§ããŸãïŒstatic #myPrivateStaticMethodïŒïŒããã®ãããªã¡ãœããã¯ãã¯ã©ã¹å ã§ã®ã¿åŒã³åºãããšãã§ããŸãã
5.ç¶æ¿ïŒæ¡åŒµ
JavaScriptã®ã¯ã©ã¹ã¯ãextendsããŒã¯ãŒãã䜿çšããç¶æ¿ããµããŒãããŸãã
åŒã§ã¯ãã¯ã©ã¹Childã¯Parent {}ãæ¡åŒµããChildã¯ã©ã¹ã¯ãParentããã³ã³ã¹ãã©ã¯ã¿ãŒããã£ãŒã«ããããã³ã¡ãœãããç¶æ¿ããŸãã
芪ã¯ã©ã¹Userãæ¡åŒµããåã¯ã©ã¹ContentWriterãäœæããŸãããã
class User {
name
constructor(name) {
this.name = name
}
getName() {
return this.name
}
}
class ContentWriter extends User {
posts = []
}
const writer = new ContentWriter('')
writer.name //
writer.getName() //
writer.posts // []
ContentWriterã¯ããŠãŒã¶ãŒããã³ã³ã¹ãã©ã¯ã¿ãŒãgetNameïŒïŒã¡ãœãããããã³ååãã£ãŒã«ããç¶æ¿ããŸããContentWriterèªäœãæ°ããæçš¿ãã£ãŒã«ããå®çŸ©ããŸãã
芪ã¯ã©ã¹ã®ãã©ã€ããŒããã£ãŒã«ããšã¡ãœããã¯ãåã¯ã©ã¹ã«ç¶æ¿ãããªãããšã«æ³šæããŠãã ããã
5.1ã芪ã³ã³ã¹ãã©ã¯ã¿ãŒïŒã³ã³ã¹ãã©ã¯ã¿ãŒïŒïŒã®ã¹ãŒããŒïŒïŒ
åã¯ã©ã¹ã®èŠªã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºãã«ã¯ãåã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãŒã§äœ¿çšå¯èœãªç¹å¥ãªsuperïŒïŒé¢æ°ã䜿çšããŸãã
ContentWriterã³ã³ã¹ãã©ã¯ã¿ãŒã芪ã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºããpostsãã£ãŒã«ããåæåããããã«ããŸãã
class User {
name
constructor(name) {
this.name = name
}
getName() {
return this.name
}
}
class ContentWriter extends User {
posts = []
constructor(name, posts) {
super(name)
this.posts = posts
}
}
const writer = new ContentWriter('', [' '])
writer.name //
writer.posts // [' ']
åã¯ã©ã¹ContentWriterã®superïŒnameïŒã¯ã芪ã¯ã©ã¹ã³ã³ã¹ãã©ã¯ã¿ãŒUserãåŒã³åºããŸãã
thisããŒã¯ãŒãã䜿çšããåã«ãåã³ã³ã¹ãã©ã¯ã¿ãŒã§superïŒïŒãåŒã³åºãããããšã«æ³šæããŠãã ãããsuperïŒïŒåŒã³åºãã¯ã芪ã³ã³ã¹ãã©ã¯ã¿ãŒãã€ã³ã¹ã¿ã³ã¹ã«ããã€ã³ããããŸãã
class Child extends Parent {
constructor(value1, value2) {
// !
this.prop2 = value2
super(value1)
}
}
5.2ã芪ã€ã³ã¹ã¿ã³ã¹ïŒã¡ãœããã®ã¹ãŒããŒ
åã¯ã©ã¹å ã®èŠªã¡ãœããã«ã¢ã¯ã»ã¹ããã«ã¯ãç¹å¥ãªã¹ãŒããŒã·ã§ãŒãã«ããã䜿çšããŸãã
class User {
name
constructor(name) {
this.name = name
}
getName() {
return this.name
}
}
class ContentWriter extends User {
posts = []
constructor(name, posts) {
super(name)
this.posts = posts
}
getName() {
const name = super.getName()
if (name === '') {
return ''
}
return name
}
}
const writer = new ContentWriter('', [' '])
writer.getName() //
åContentWriterã¯ã©ã¹ã®getNameïŒïŒã¯ã芪ã¯ã©ã¹Userã®getNameïŒïŒã¡ãœãããåŒã³åºããŸãã
ããã¯ãã¡ãœãããªãŒããŒã©ã€ããšåŒã°ããŸãã
superã¯ã芪ã¯ã©ã¹ã®éçã¡ãœããã«ã䜿çšã§ããããšã«æ³šæããŠãã ããã
6.ãªããžã§ã¯ãã¿ã€ããã§ãã¯ïŒinstanceof
ã¯ã©ã¹åŒã®ãªããžã§ã¯ãinstanceofã¯ããªããžã§ã¯ããæå®ãããã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã§ãããã©ãããå€å¥ããŸãã
äŸãèããŠã¿ãŸãããïŒ
class User {
name
constructor(name) {
this.name = name
}
getName() {
return this.name
}
}
const user = new User('')
const obj = {}
user instanceof User // true
obj instanceof User // false
instanceofæŒç®åã¯å€æ æ§ã§ãããã¯ã©ã¹ãã§ãŒã³å šäœã調ã¹ãŸãã
class User {
name
constructor(name) {
this.name = name
}
getName() {
return this.name
}
}
class ContentWriter extends User {
posts = []
constructor(name, posts) {
super(name)
this.posts = posts
}
}
const writer = new ContentWriter('', [' '])
writer instanceof ContentWriter // true
writer instanceof User // true
ç¹å®ã®ã€ã³ã¹ã¿ã³ã¹ã¯ã©ã¹ãå®çŸ©ããå¿ èŠãããå Žåã¯ã©ããªããŸããïŒã³ã³ã¹ãã©ã¯ã¿ãŒããããã£ã¯ãããã«äœ¿çšã§ããŸãã
writer.constructor === ContentWriter // true
writer.constructor === User // false
//
writer.__proto__ === ContentWriter.prototype // true
writer.__proto__ === User.prototype // false
7.ã¯ã©ã¹ãšãããã¿ã€ã
ã¯ã©ã¹æ§æã¯ããããã¿ã€ãã®ç¶æ¿ã«å¯Ÿããåªããæœè±¡åã§ãããšèšããªããã°ãªããŸãããã¯ã©ã¹ã䜿çšããããã«ãããã¿ã€ããåç §ããå¿ èŠã¯ãããŸããã
ãã ããã¯ã©ã¹ã¯ããããã¿ã€ãã®ç¶æ¿ã«é¢ããåãªãäžäœæ§é ã§ãããã¹ãŠã®ã¯ã©ã¹ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºããããšãã«ã€ã³ã¹ã¿ã³ã¹ãäœæããé¢æ°ã§ãã
次ã®2ã€ã®äŸã¯åãã§ãã
ã¯ã©ã¹ïŒ
class User {
constructor(name) {
this.name = name
}
getName() {
return this.name
}
}
const user = new User('')
user.getName() //
user instanceof User // true
ãããã¿ã€ãïŒ
function User(name) {
this.name = name
}
User.prototype.getName = function () {
return this.name
}
const user = new User('')
user.getName() //
user instanceof User // true
ãããã£ãŠãã¯ã©ã¹ãç解ããã«ã¯ããããã¿ã€ãã®ç¶æ¿ã«é¢ããååãªç¥èãå¿ èŠã§ãã
8.ã¯ã©ã¹æ©èœã®å¯çšæ§
ãã®èšäºã§çŽ¹ä»ããã¯ã©ã¹æ©èœã¯ãæ€èšã®ç¬¬3段éã§ES6ä»æ§ãšææ¡ã«åããããŸãã
- ãããªãã¯ã€ã³ã¹ã¿ã³ã¹ãã£ãŒã«ããšãã©ã€ããŒãã€ã³ã¹ã¿ã³ã¹ãã£ãŒã«ã
- ãã©ã€ããŒãã€ã³ã¹ã¿ã³ã¹ã¡ãœãããšã¢ã¯ã»ãµãŒ
- ãããªãã¯ããã³ãã©ã€ããŒãéçãã£ãŒã«ããšãã©ã€ããŒãéçã¡ãœãã
- ES6ä»æ§
çŽ ãããïŒäœ¿çšã§ããŸããã«ãããšããã©ã€ããŒãã¯ã©ã¹ãã£ãŒã«ãã®ãµããŒãã¯çŸåš68ïŒ ã§ãã
9.çµè«
JavaScriptã®ã¯ã©ã¹ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒã䜿çšããŠã€ã³ã¹ã¿ã³ã¹ãåæåãããããã®ãã£ãŒã«ããšã¡ãœãããå®çŸ©ããããã«äœ¿çšãããŸããstaticããŒã¯ãŒãã䜿çšããŠãã¯ã©ã¹èªäœã®ãã£ãŒã«ããšã¡ãœãããå®çŸ©ã§ããŸãã
ç¶æ¿ã¯ãextendsããŒã¯ãŒãã䜿çšããŠå®è£ ãããŸããsuperããŒã¯ãŒãã䜿çšãããšãåãã芪ã¯ã©ã¹ã«ã¢ã¯ã»ã¹ã§ããŸãã
ã«ãã»ã«åãå©çšããããã«ãããªãã¡ å éšå®è£ ã®è©³çŽ°ãé衚瀺ã«ãããã£ãŒã«ããšã¡ãœããããã©ã€ããŒãã«ããŸãããã®ãããªãã£ãŒã«ããšã¡ãœããã®ååã¯ãïŒèšå·ã§å§ãŸãå¿ èŠããããŸãã
ã¯ã©ã¹ã¯çŸä»£ã®JavaScriptã«éåšããŠããŸãã
ãã®èšäºãã圹ã«ç«ãŠã°å¹žãã§ããæž èŽããããšãããããŸããã