
è¯ãäžæ¥ãåéïŒ
JavaScriptã§ãªããžã§ã¯ããäœæããæ¹æ³ã¯4ã€ãããŸãã
- ã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°
- ã¯ã©ã¹ïŒã¯ã©ã¹ïŒ
- ä»ã®ãªããžã§ã¯ãã«ãªã³ã¯ããŠãããªããžã§ã¯ãïŒOLOOïŒ
- å·¥å Žæ©èœ
ã©ã®æ¹æ³ã䜿çšããå¿ èŠããããŸããïŒã©ããæé«ã§ããïŒ
ãããã®è³ªåã«çããããã«ãåã¢ãããŒããåå¥ã«æ€èšããã ãã§ãªããç¶æ¿ãã«ãã»ã«åãããŒã¯ãŒããthisããã€ãã³ããã³ãã©ãŒã®åºæºã«åŸã£ãŠãã¯ã©ã¹ãšãã¡ã¯ããªé¢æ°ãæ¯èŒããŸãã
ãªããžã§ã¯ãæåããã°ã©ãã³ã°ïŒOOPïŒãšã¯äœãããå§ããŸãããã
OOPãšã¯äœã§ããïŒ
åºæ¬çã«ãOOPã¯ãåäžã®ãªããžã§ã¯ãã䜿çšããŠãªããžã§ã¯ããäœæã§ããããã«ããã³ãŒããäœæããæ¹æ³ã§ããããã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒã®èšèšãã¿ãŒã³ã®æ¬è³ªã§ããããŸããå ±æãªããžã§ã¯ãã¯éåžžããã«ãŒããªã³ãããã«ãŒããªã³ãããŸãã¯ãã«ãŒããªã³ããšåŒã°ããå ±æãªããžã§ã¯ããäœæãããªããžã§ã¯ãã¯ã€ã³ã¹ã¿ã³ã¹ã§ãã
åã€ã³ã¹ã¿ã³ã¹ã«ã¯ã芪ããç¶æ¿ãããããããã£ãšç¬èªã®ããããã£ã®äž¡æ¹ããããŸããããšãã°ãHumanãããžã§ã¯ããããå Žåãããã«åºã¥ããŠç°ãªãååã®ã€ã³ã¹ã¿ã³ã¹ãäœæã§ããŸãã
OOPã®2çªç®ã®åŽé¢ã¯ãã¬ãã«ã®ç°ãªãè€æ°ã®ãããžã§ã¯ããããå Žåã®ã³ãŒãã®æ§é åã§ããããã¯ãç¶æ¿ãŸãã¯ãµãã¯ã©ã¹åãšåŒã°ããŸãã
OOPã®3çªç®ã®åŽé¢ã¯ã«ãã»ã«åã§ããããã¯ãå®è£ ã®è©³çްãå€éšããé ããå€éšãã倿°ã颿°ã«ã¢ã¯ã»ã¹ã§ããªãããã«ããå Žåã§ããããããã¢ãžã¥ãŒã«ãšãã¡ãµãŒãã®èšèšãã¿ãŒã³ã®æ¬è³ªã§ãã
ãªããžã§ã¯ããäœæããæ¹æ³ã«ç§»ããŸãããã
ãªããžã§ã¯ãäœææ¹æ³
ã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°
ã³ã³ã¹ãã©ã¯ã¿ãŒã¯ããthisãããŒã¯ãŒãã䜿çšãã颿°ã§ãã
function Human(firstName, lastName) {
this.firstName = firstName
this.lastName = lastName
}
ããã«ãããäœæäžã®ã€ã³ã¹ã¿ã³ã¹ã®äžæã®å€ãä¿åããŠã¢ã¯ã»ã¹ã§ããŸããã€ã³ã¹ã¿ã³ã¹ã¯ããnewãããŒã¯ãŒãã䜿çšããŠäœæãããŸãã
const chris = new Human('Chris', 'Coyier')
console.log(chris.firstName) // Chris
console.log(chris.lastName) // Coyier
const zell = new Human('Zell', 'Liew')
console.log(zell.firstName) // Zell
console.log(zell.lastName) // Liew
ã¯ã©ã¹
ã¯ã©ã¹ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ã®æœè±¡åïŒãæ§æã·ã¥ã¬ãŒãïŒã§ããã€ã³ã¹ã¿ã³ã¹ã®äœæãç°¡åã«ãªããŸãã
class Human {
constructor(firstName, lastName) {
this.firstName = firstName
this.lastName = lastName
}
}
ã³ã³ã¹ãã©ã¯ã¿ãŒã«ã¯ãäžèšã®ã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ãšåãã³ãŒããå«ãŸããŠããããšã«æ³šæããŠãã ããããããåæåããã«ã¯ããããè¡ãå¿ èŠããããŸããåæå€ãå²ãåœãŠãå¿ èŠããªãå Žåã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒãçç¥ã§ããŸãã
äžèŠãããšãã¯ã©ã¹ã¯ã³ã³ã¹ãã©ã¯ã¿ãŒãããè€éã«èŠããŸããããå€ãã®ã³ãŒããäœæããå¿ èŠããããŸããããªãã®éЬãä¿æããçµè«ã«ãžã£ã³ãããªãã§ãã ãããã¯ã©ã¹ã¯ãã£ãããã§ããçç±ã¯å°ãåŸã§ããããŸãã
ã€ã³ã¹ã¿ã³ã¹ããnewãããŒã¯ãŒãã䜿çšããŠäœæãããŸãã
const chris = new Human('Chris', 'Coyier')
console.log(chris.firstName) // Chris
console.log(chris.lastName) // Coyier
ãªããžã§ã¯ãã®ãªã³ã¯
ãªããžã§ã¯ããäœæãããã®æ¹æ³ã¯ãKyleSimpsonã«ãã£ãŠææ¡ãããŸããããã®ã¢ãããŒãã§ã¯ããããžã§ã¯ããéåžžã®ãªããžã§ã¯ããšããŠå®çŸ©ããŸããæ¬¡ã«ãã¡ãœããïŒéåžžã¯initãšåŒã°ããŸãããã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãŒãšã¯ç°ãªããããã¯å¿ é ã§ã¯ãããŸããïŒã䜿çšããŠãã€ã³ã¹ã¿ã³ã¹ãåæåããŸãã
const Human = {
init(firstName, lastName) {
this.firstName = firstName
this.lastName = lastName
}
}
Object.createã¯ãã€ã³ã¹ã¿ã³ã¹ãäœæããããã«äœ¿çšãããŸããã€ã³ã¹ã¿ã³ã¹ååŸãinitãåŒã³åºãããŸãã
const chris = Object.create(Human)
chris.init('Chris', 'Coyier')
console.log(chris.firstName) // Chris
console.log(chris.lastName) // Coyier
ãããinitã«æ»ãããšã§ãã³ãŒããå°ãæ¹åã§ããŸãã
const Human = {
init () {
// ...
return this
}
}
const chris = Object.create(Human).init('Chris', 'Coyier')
console.log(chris.firstName) // Chris
console.log(chris.lastName) // Coyier
å·¥å Žæ©èœ
ãã¡ã¯ããªé¢æ°ã¯ããªããžã§ã¯ããè¿ã颿°ã§ããä»»æã®ãªããžã§ã¯ããè¿ãããšãã§ããŸããã¯ã©ã¹ãŸãã¯ãªããžã§ã¯ããã€ã³ãã£ã³ã°ã®ã€ã³ã¹ã¿ã³ã¹ãè¿ãããšãã§ããŸãã
ãã¡ã¯ããªé¢æ°ã®ç°¡åãªäŸã次ã«ç€ºããŸãã
function Human(firstName, lastName) {
return {
firstName,
lastName
}
}
ã€ã³ã¹ã¿ã³ã¹ãäœæããã®ã«ãthisãããŒã¯ãŒãã¯å¿ èŠãããŸããã颿°ãåŒã³åºãã ãã§ãã
const chris = Human('Chris', 'Coyier')
console.log(chris.firstName) // Chris
console.log(chris.lastName) // Coyier
次ã«ãããããã£ãšã¡ãœããã远å ããæ¹æ³ãèŠãŠã¿ãŸãããã
ããããã£ãšã¡ãœããã®å®çŸ©
ã¡ãœããã¯ããªããžã§ã¯ãã®ããããã£ãšããŠå®£èšããã颿°ã§ãã
const someObject = {
someMethod () { /* ... */ }
}
OOPã§ã¯ãããããã£ãšã¡ãœãããå®çŸ©ããæ¹æ³ã2ã€ãããŸãã
- äžäŸãšããŠ
- ãããã¿ã€ãã§
ã³ã³ã¹ãã©ã¯ã¿ãŒã§ã®ããããã£ãšã¡ãœããã®å®çŸ©
ã€ã³ã¹ã¿ã³ã¹ã«ããããã£ãå®çŸ©ããã«ã¯ããããã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ã«è¿œå ããå¿ èŠããããŸããå¿ ãããã«ããããã£ã远å ããŠãã ããã
function Human (firstName, lastName) {
//
this.firstName = firstName
this.lastname = lastName
//
this.sayHello = function () {
console.log(`Hello, I'm ${firstName}`)
}
}
const chris = new Human('Chris', 'Coyier')
console.log(chris)

ã¡ãœããã¯éåžžããããã¿ã€ãã§å®çŸ©ãããŸããããã«ãããã€ã³ã¹ã¿ã³ã¹ããšã«é¢æ°ãäœæããå¿ èŠããªããªããŸãããã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ãåäžã®æ©èœïŒå ±æãŸãã¯åæ£æ©èœãšåŒã°ããïŒãå ±æã§ããããã«ããŸãã
ãããã¿ã€ãã«ããããã£ã远å ããã«ã¯ãprototypeã䜿çšããŸãã
function Human (firstName, lastName) {
this.firstName = firstName
this.lastname = lastName
}
//
Human.prototype.sayHello = function () {
console.log(`Hello, I'm ${this.firstName}`)
}

è€æ°ã®ã¡ãœãããäœæããã®ã¯é¢åã§ãã
//
Human.prototype.method1 = function () { /*...*/ }
Human.prototype.method2 = function () { /*...*/ }
Human.prototype.method3 = function () { /*...*/ }
Object.assignã䜿çšãããšãäœæ¥ã楜ã«ãªããŸãã
Object.assign(Human.prototype, {
method1 () { /*...*/ },
method2 () { /*...*/ },
method3 () { /*...*/ }
})
ã¯ã©ã¹ã§ã®ããããã£ãšã¡ãœããã®å®çŸ©
ã€ã³ã¹ã¿ã³ã¹ããããã£ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒã§å®çŸ©ã§ããŸãã
class Human {
constructor (firstName, lastName) {
this.firstName = firstName
this.lastname = lastName
this.sayHello = function () {
console.log(`Hello, I'm ${firstName}`)
}
}
}

ãããã¿ã€ãããããã£ã¯ãã³ã³ã¹ãã©ã¯ã¿ã®åŸã«éåžžã®é¢æ°ãšããŠå®çŸ©ãããŸãã
class Human (firstName, lastName) {
constructor (firstName, lastName) { /* ... */ }
sayHello () {
console.log(`Hello, I'm ${this.firstName}`)
}
}

ã¯ã©ã¹ã§è€æ°ã®ã¡ãœãããäœæããããšã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒãããç°¡åã§ããããã«ã¯Object.assignã¯å¿ èŠãããŸãããä»ã®æ©èœã远å ããŠããã ãã§ãã
class Human (firstName, lastName) {
constructor (firstName, lastName) { /* ... */ }
method1 () { /*...*/ }
method2 () { /*...*/ }
method3 () { /*...*/ }
}
ãªããžã§ã¯ãããã€ã³ããããšãã®ããããã£ãšã¡ãœããã®å®çŸ©
ã€ã³ã¹ã¿ã³ã¹ã®ããããã£ãå®çŸ©ããã«ã¯ãããã«ããããã£ã远å ããŸãã
const Human = {
init (firstName, lastName) {
this.firstName = firstName
this.lastName = lastName
this.sayHello = function () {
console.log(`Hello, I'm ${firstName}`)
}
return this
}
}
const chris = Object.create(Human).init('Chris', 'Coyier')
console.log(chris)

ãããã¿ã€ãã¡ãœããã¯ãéåžžã®ãªããžã§ã¯ããšããŠå®çŸ©ãããŠããŸãã
const Human = {
init () { /*...*/ },
sayHello () {
console.log(`Hello, I'm ${this.firstName}`)
}
}

ãã¡ã¯ããªé¢æ°ïŒFFïŒã§ã®ããããã£ãšã¡ãœããã®å®çŸ©
ããããã£ãšã¡ãœããã¯ãè¿ããããªããžã§ã¯ãã«å«ããããšãã§ããŸãã
function Human (firstName, lastName) {
return {
firstName,
lastName,
sayHello () {
console.log(`Hello, I'm ${firstName}`)
}
}
}

FFã䜿çšããå Žåããããã¿ã€ãããããã£ãå®çŸ©ããããšã¯ã§ããŸããããã®ãããªããããã£ãå¿ èŠãªå Žåã¯ãã¯ã©ã¹ãã³ã³ã¹ãã©ã¯ã¿ãŒããŸãã¯ãªããžã§ã¯ããã€ã³ãã£ã³ã°ã®ã€ã³ã¹ã¿ã³ã¹ãè¿ãããšãã§ããŸãïŒãã ããããã¯æå³ããããŸããïŒã
//
function createHuman (...args) {
return new Human(...args)
}
ããããã£ãšã¡ãœãããå®çŸ©ããå Žæ
ããããã£ãšã¡ãœãããã©ãã§å®çŸ©ããå¿ èŠããããŸããïŒã€ã³ã¹ã¿ã³ã¹ãŸãã¯ãããã¿ã€ãïŒ
å€ãã®äººã¯ããããã¿ã€ããããã«é©ããŠãããšèããŠããŸãã
ããããããã¯æ¬åœã«éèŠã§ã¯ãããŸããã
ã€ã³ã¹ã¿ã³ã¹ã«ããããã£ãšã¡ãœãããå®çŸ©ããããšã«ãããåã€ã³ã¹ã¿ã³ã¹ã¯ããå€ãã®ã¡ã¢ãªãæ¶è²»ããŸãããããã¿ã€ãã§ã¡ãœãããå®çŸ©ããå Žåãã¡ã¢ãªã®æ¶è²»éã¯å°ãªããªããŸãããéèŠã§ã¯ãããŸãããææ°ã®ã³ã³ãã¥ãŒã¿ãŒã®èœåãèãããšããã®éãã¯éèŠã§ã¯ãããŸãããã§ããããããªãã«æé©ãªããšã¯äœã§ãããŠãã ããã
ããšãã°ãã¯ã©ã¹ãŸãã¯ãªããžã§ã¯ããã€ã³ãã£ã³ã°ã䜿çšããå Žåã¯ãã³ãŒããèšè¿°ããããããããããããã¿ã€ãã䜿çšããããšããå§ãããŸãã FFã®å Žåããããã¿ã€ãã¯äœ¿çšã§ããŸãããã€ã³ã¹ã¿ã³ã¹ã®ããããã£ã®ã¿ãå®çŸ©ã§ããŸãã
çŽ per ãïŒäœè ã«å察ãããŠãã ãããããããã£ãšã¡ãœãããå®çŸ©ãããšãã«ã€ã³ã¹ã¿ã³ã¹ã®ä»£ããã«ãããã¿ã€ãã䜿çšããåé¡ã¯ãã¡ã¢ãªäœ¿çšéã®åé¡ã ãã§ãªããäœãããå®çŸ©ãããŠããããããã£ãŸãã¯ã¡ãœããã®ç®çã®åé¡ã§ããããããã£ãŸãã¯ã¡ãœãããã€ã³ã¹ã¿ã³ã¹ããšã«äžæã§ããå¿ èŠãããå Žåã¯ãã€ã³ã¹ã¿ã³ã¹ã§å®çŸ©ããå¿ èŠããããŸããããããã£ãŸãã¯ã¡ãœããããã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ã§åãïŒå ±éïŒã«ããå Žåã¯ããããã¿ã€ãã§å®çŸ©ããå¿ èŠããããŸããåŸè ã®å Žåãããããã£ãŸãã¯ã¡ãœããã«å€æŽãå ããå¿ èŠãããå Žåã¯ãåå¥ã«èª¿æŽãããã€ã³ã¹ã¿ã³ã¹ã®ããããã£ããã³ã¡ãœãããšã¯å¯Ÿç §çã«ããããã¿ã€ãã«å€æŽãå ããã ãã§ååã§ãã
äºåççµè«
調æ»ããè³æã«åºã¥ããŠãããã€ãã®çµè«ãå°ãåºãããšãã§ããŸããããã¯ç§ã®å人çãªæèŠã§ãã
- ã¯ã©ã¹ã¯ãè€æ°ã®ã¡ãœãããç°¡åã«å®çŸ©ã§ãããããã³ã³ã¹ãã©ã¯ã¿ãŒãããåªããŠããŸãã
- Object.createã䜿çšããå¿ èŠãããããããªããžã§ã¯ãã®ãã€ã³ãã¯å¥åŠã«æããŸãããã®ã¢ãããŒããç ç©¶ãããšããç§ã¯ãããå¿ãç¶ããŸãããç§ã«ãšã£ãŠãããã¯ãã以äžã®äœ¿çšãæåŠããã®ã«ååãªçç±ã§ããã
- ã¯ã©ã¹ãšFFãæã䜿ããããã§ããåé¡ã¯ããããã¿ã€ããFFã§äœ¿çšã§ããªãããšã§ããããããå ã«è¿°ã¹ãããã«ãããã¯å®éã«ã¯åé¡ã§ã¯ãããŸããã
次ã«ãJavaScriptã§ãªããžã§ã¯ããäœæãã2ã€ã®æè¯ã®æ¹æ³ãšããŠãã¯ã©ã¹ãšFFãæ¯èŒããŸãã
ã¯ã©ã¹vs.FF-ç¶æ¿
ã¯ã©ã¹ãšFFã®æ¯èŒã«é²ãåã«ãOOPã®æ ¹åºã«ãã3ã€ã®æŠå¿µãçè§£ããå¿ èŠããããŸãã
- ç¶æ¿
- ã«ãã»ã«å
- ãã®
ç¶æ¿ããå§ããŸãããã
ç¶æ¿ãšã¯äœã§ããïŒ
JavaScriptã§ã¯ãç¶æ¿ãšã¯ãããããã£ã芪ããåã«æž¡ãããšãæå³ããŸãããããžã§ã¯ãããã€ã³ã¹ã¿ã³ã¹ãžã
ããã¯2ã€ã®æ¹æ³ã§çºçããŸãã
- ã€ã³ã¹ã¿ã³ã¹ã®åæåã䜿çšãã
- ãããã¿ã€ããã§ãŒã³ã䜿çšãã
2çªç®ã®ã±ãŒã¹ã§ã¯ã芪ãããžã§ã¯ããåãããžã§ã¯ãã§å±éãããŸããããã¯ãµãã¯ã©ã¹åãšåŒã°ããŸãããç¶æ¿ãšåŒã°ããããšããããŸãã
ãµãã¯ã©ã¹åãçè§£ãã
ãµãã¯ã©ã¹åãšã¯ãåãããžã§ã¯ããèŠªãæ¡åŒµããããšã§ãã
ã¯ã©ã¹ã®äŸãèŠãŠã¿ãŸãããã
ã¯ã©ã¹ã«ãããµãã¯ã©ã¹å
ãextendsãããŒã¯ãŒãã¯ã芪ã¯ã©ã¹ãæ¡åŒµããããã«äœ¿çšãããŸãã
class Child extends Parent {
// ...
}
ããšãã°ãHumanã¯ã©ã¹ãæ¡åŒµããDeveloperã¯ã©ã¹ãäœæããŸãããã
// Human
class Human {
constructor (firstName, lastName) {
this.firstName = firstName
this.lastName = lastName
}
sayHello () {
console.log(`Hello, I'm ${this.firstName}`)
}
}
Developerã¯ã©ã¹ã¯ãHumanãæ¬¡ã®ããã«æ¡åŒµããŸãã
class Developer extends Human {
constructor(firstName, lastName) {
super(firstName, lastName)
}
// ...
}
ãsuperãããŒã¯ãŒãã¯ããHumanãã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºããŸãããããå¿ èŠãªãå Žåã¯ãsuperãçç¥ã§ããŸãã
class Developer extends Human {
// ...
}
éçºè ãã³ãŒããæžãããšãã§ãããšããŸãããïŒèª°ãèããã§ãããïŒã察å¿ããã¡ãœããã远å ããŸãããã
class Developer extends Human {
code (thing) {
console.log(`${this.firstName} coded ${thing}`)
}
}
ããã¯ããDeveloperãã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã®äŸã§ãã
const chris = new Developer('Chris', 'Coyier')
console.log(chris)

FFã«ãããµãã¯ã©ã¹å
FFã䜿çšããŠãµãã¯ã©ã¹ãäœæããã«ã¯ã次ã®4ã€ã®æé ãå®è¡ããå¿ èŠããããŸãã
- æ°ããFFãäœæãã
- 芪ãããžã§ã¯ãã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŸã
- ãã®ã€ã³ã¹ã¿ã³ã¹ã®ã³ããŒãäœæããŸã
- ãã®ã³ããŒã«ããããã£ãšã¡ãœããã远å ããŸã
ãã®ããã»ã¹ã¯æ¬¡ã®ããã«ãªããŸãã
function Subclass (...args) {
const instance = ParentClass(...args)
return Object.assign({}, instance, {
//
})
}
ãµãã¯ã©ã¹ãDeveloperããäœæããŸããããFFããã¥ãŒãã³ãã¯ãããªæãã
function Human (firstName, lastName) {
return {
firstName,
lastName,
sayHello () {
console.log(`Hello, I'm ${firstName}`)
}
}
}
éçºè ãäœæããŸãã
function Developer (firstName, lastName) {
const human = Human(firstName, lastName)
return Object.assign({}, human, {
//
})
}
ãã³ãŒããã¡ãœããã远å ããŸãã
function Developer (firstName, lastName) {
const human = Human(firstName, lastName)
return Object.assign({}, human, {
code (thing) {
console.log(`${this.firstName} coded ${thing}`)
}
})
}
Developerã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŸãã
const chris = Developer('Chris', 'Coyier')
console.log(chris)

芪ã¡ãœãããäžæžããã
ãµãã¯ã©ã¹å ã®èŠªã¡ãœãããäžæžãããå¿ èŠãããå ŽåããããŸããããã¯æ¬¡ã®ããã«å®è¡ã§ããŸãã
- åãååã®ã¡ãœãããäœæããŸã
- 芪ã¡ãœãããåŒã³åºãïŒãªãã·ã§ã³ïŒ
- ãµãã¯ã©ã¹ã«æ°ããã¡ãœãããäœæããŸã
ãã®ããã»ã¹ã¯æ¬¡ã®ããã«ãªããŸãã
class Developer extends Human {
sayHello () {
//
super.sayHello()
//
console.log(`I'm a developer.`)
}
}
const chris = new Developer('Chris', 'Coyier')
chris.sayHello()

FFã䜿çšããåãããã»ã¹ã
function Developer (firstName, lastName) {
const human = Human(firstName, lastName)
return Object.assign({}, human, {
sayHello () {
//
human.sayHello()
//
console.log(`I'm a developer.`)
}
})
}
const chris = new Developer('Chris', 'Coyier')
chris.sayHello()

ç¶æ¿ãšæ§æ
ç¶æ¿ã«ã€ããŠã®äŒè©±ã¯ãæ§æã«èšåããã«è¡ãããããšã¯ãã£ãã«ãããŸããããšãªãã¯ãšãªãªããã®ãããªå°éå®¶ã¯ãå¯èœãªéãäœæ²ã䜿çšãã¹ãã ãšä¿¡ããŠããŸãã
äœæ²ãšã¯ïŒ
æ§æãçè§£ãã
åºæ¬çã«ãæ§æã¯ããã€ãã®ãã®ã1ã€ã«çµã¿åããããã®ã§ãããªããžã§ã¯ããçµã¿åãããæãäžè¬çã§æãç°¡åãªæ¹æ³ã¯ãObject.assignã䜿çšããããšã§ãã
const one = { one: 'one' }
const two = { two: 'two' }
const combined = Object.assign({}, one, two)
æ§æã¯äŸã§èª¬æããã®ãæãç°¡åã§ããDeveloperãšDesignerã®2ã€ã®ãµãã¯ã©ã¹ããããšããŸããããèšèšè ã¯èšè𿹿³ãç¥ã£ãŠãããéçºè ã¯ã³ãŒãã®èšè¿°æ¹æ³ãç¥ã£ãŠããŸããã©ã¡ãããHumanãã¯ã©ã¹ãç¶æ¿ããŠããŸãã
class Human {
constructor(firstName, lastName) {
this.firstName = firstName
this.lastName = lastName
}
sayHello () {
console.log(`Hello, I'm ${this.firstName}`)
}
}
class Designer extends Human {
design (thing) {
console.log(`${this.firstName} designed ${thing}`)
}
}
class Developer extends Designer {
code (thing) {
console.log(`${this.firstName} coded ${thing}`)
}
}
ããã§ã3çªç®ã®ãµãã¯ã©ã¹ãäœæãããšããŸãããã®ãµãã¯ã©ã¹ã¯ãèšèšè ãšéçºè ãæ··åšããŠããå¿ èŠããããŸããã³ãŒãã®èšèšãšèšè¿°ã®äž¡æ¹ãã§ããå¿ èŠããããŸãããããDesignerDeveloperïŒãŸãã¯å¿ èŠã«å¿ããŠDeveloperDesignerïŒãšåŒã³ãŸãããã
ã©ããã£ãŠäœæããŸããïŒ
ãDesignerãã¯ã©ã¹ãšãDeveloperãã¯ã©ã¹ãåæã«æ¡åŒµããããšã¯ã§ããŸãããã©ã®ããããã£ãæåã«æå®ããããæ±ºå®ã§ããªããããããã¯äžå¯èœã§ããããã¯ããã€ã€ã¢ã³ãåé¡ïŒãã€ã€ã¢ã³ãç¶æ¿ïŒãšåŒã°ããŸãã

ãããªããžã§ã¯ããå¥ã®ãªããžã§ã¯ããããåªå ããå ŽåãRhombusã®åé¡ã¯Object.assignã§è§£æ±ºã§ããŸãããã ããJavaScriptã¯è€æ°ã®ç¶æ¿ããµããŒãããŠããŸããã
//
class DesignerDeveloper extends Developer, Designer {
// ...
}
ããã§äœæ²ã圹ã«ç«ã¡ãŸãã
ãã®ã¢ãããŒãã§ã¯ã次ã®ããã«è¿°ã¹ãŠããŸããDesignerDeveloperããµãã¯ã©ã¹åãã代ããã«ãå¿ èŠã«å¿ããŠãµãã¯ã©ã¹åã§ããã¹ãã«ãå«ããªããžã§ã¯ããäœæããŸãã
ãã®ã¢ãããŒãã®å®è£ ã¯ã次ã®ããšã«ã€ãªãããŸãã
const skills = {
code (thing) { /* ... */ },
design (thing) { /* ... */ },
sayHello () { /* ... */ }
}
æå®ããããªããžã§ã¯ãã䜿çšããŠ3ã€ã®ç°ãªãã¯ã©ã¹ãäœæã§ãããããHumanã¯ã©ã¹ã¯ããå¿ èŠãããŸããã
DesignerDeveloperã®ã³ãŒãã¯æ¬¡ã®ãšããã§ãã
class DesignerDeveloper {
constructor (firstName, lastName) {
this.firstName = firstName
this.lastName = lastName
Object.assign(this, {
code: skills.code,
design: skills.design,
sayHello: skills.sayHello
})
}
}
const chris = new DesignerDeveloper('Chris', 'Coyier')
console.log(chris)

DesignerãšDeveloperã§ãåãããšãã§ããŸãã
class Designer {
constructor (firstName, lastName) {
this.firstName = firstName
this.lastName = lastName
Object.assign(this, {
design: skills.design,
sayHello: skills.sayHello
})
}
}
class Developer {
constructor (firstName, lastName) {
this.firstName = firstName
this.lastName = lastName
Object.assign(this, {
code: skills.code,
sayHello: skills.sayHello
})
}
}
ã€ã³ã¹ã¿ã³ã¹ã«ã¡ãœãããäœæããŠããããšã«æ°ã¥ããŸãããïŒããã¯ãå¯èœãªãªãã·ã§ã³ã®1ã€ã«ãããŸããããããã¿ã€ãã«ã¡ãœãããé 眮ããããšãã§ããŸãããäžèŠã ãšæããŸãïŒãã®ã¢ãããŒãã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒã«æ»ã£ãããã§ãïŒã
class DesignerDeveloper {
constructor (firstName, lastName) {
this.firstName = firstName
this.lastName = lastName
}
}
Object.assign(DesignerDeveloper.prototype, {
code: skills.code,
design: skills.design,
sayHello: skills.sayHello
})

é©åãšæãããã¢ãããŒãã䜿çšããŠãã ãããçµæã¯åãã«ãªããŸãã
FFã«ããæ§æ
FFã䜿çšããæ§æãšã¯ãè¿ããããªããžã§ã¯ãã«åæ£ã¡ãœããã远å ããããšã§ãã
function DesignerDeveloper (firstName, lastName) {
return {
firstName,
lastName,
code: skills.code,
design: skills.design,
sayHello: skills.sayHello
}
}

ç¶æ¿ãšæ§æ
ç¶æ¿ãšæ§æãåæã«äœ¿çšã§ããªããšã¯èª°ãèšã£ãŠããŸããã
DesignerãDeveloperãããã³DesignerDeveloperã®äŸã«æ»ããšããããã人éã§ããããšã«æ³šæããŠãã ããããããã£ãŠãHumanã¯ã©ã¹ãæ¡åŒµã§ããŸãã
ããã¯ãã¯ã©ã¹æ§æã䜿çšããç¶æ¿ãšæ§æã®äŸã§ãã
class Human {
constructor (firstName, lastName) {
this.firstName = firstName
this.lastName = lastName
}
sayHello () {
console.log(`Hello, I'm ${this.firstName}`)
}
}
class DesignerDeveloper extends Human {}
Object.assign(DesignerDeveloper.prototype, {
code: skills.code,
design: skills.design
})

ãããŠãããã¯FFã®äœ¿çšãšåãã§ãã
function Human (firstName, lastName) {
return {
firstName,
lastName,
sayHello () {
console.log(`Hello, I'm ${this.firstName}`)
}
}
}
function DesignerDeveloper (firstName, lastName) {
const human = Human(firstName, lastName)
return Object.assign({}, human, {
code: skills.code,
design: skills.design
})
}

å®äžçã®ãµãã¯ã©ã¹
å€ãã®å°éå®¶ã¯ãæ§æã¯ãµãã¯ã©ã¹ãããæè»ã§ããïŒãããã£ãŠããæçšã§ããïŒãšäž»åŒµããŠããŸããããµãã¯ã©ã¹ã軜èŠãã¹ãã§ã¯ãããŸãããç§ãã¡ãæ±ãããšã®å€ãã¯ããã®æŠç¥ã«åºã¥ããŠããŸãã
äŸïŒãã¯ãªãã¯ãã€ãã³ãã¯MouseEventã§ããMouseEventã¯UIEventïŒãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã€ãã³ãïŒã®ãµãã¯ã©ã¹ã§ãããUIEventïŒãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã€ãã³ãïŒã¯EventïŒã€ãã³ãïŒã®ãµãã¯ã©ã¹ã§ãã

å¥ã®äŸïŒHTMLèŠçŽ ã¯ããŒãã®ãµãã¯ã©ã¹ã§ãããããã£ãŠãããŒãã®ãã¹ãŠã®ããããã£ãšã¡ãœããã䜿çšã§ããŸãã

ç¶æ¿ã«é¢ããäºåççµè«
ç¶æ¿ãšæ§æã¯ãã¯ã©ã¹ãšFFã®äž¡æ¹ã§äœ¿çšã§ããŸããFFã§ã¯ãæ§æã¯ãããã¯ãªãŒã³ãã«èŠããŸãããããã¯ã¯ã©ã¹ããããããã«æå©ã§ãã
æ¯èŒãç¶ããŸãããã
ã¯ã©ã¹vs.FF-ã«ãã»ã«å
åºæ¬çã«ãã«ãã»ã«åãšã¯ããããã®ãå¥ã®ç©ã®äžã«é ããå åŽã®ãšãã»ã³ã¹ã«å€åŽããã¢ã¯ã»ã¹ã§ããªãããã«ããããšã§ãã
JavaScriptã§ã¯ãé衚瀺ã®ãšã³ãã£ãã£ã¯ãçŸåšã®ã³ã³ããã¹ãã§ã®ã¿äœ¿çšã§ãã倿°ããã³é¢æ°ã§ãããã®å Žåãã³ã³ããã¹ãã¯ã¹ã³ãŒããšåãã§ãã
åçŽãªã«ãã»ã«å
ã«ãã»ã«åã®æãåçŽãªåœ¢åŒã¯ãã³ãŒãã®ãããã¯ã§ãã
{
// , ,
}
ãããã¯å ã§ã¯ããããã¯å€ã§å®£èšããã倿°ã«ã¢ã¯ã»ã¹ã§ããŸãã
const food = 'Hamburger'
{
console.log(food)
}

ãããããã®éã¯ãããŸããã
{
const food = 'Hamburger'
}
console.log(food)

ãvarãããŒã¯ãŒãã§å®£èšããã倿°ã«ã¯ãã°ããŒãã«ã¹ã³ãŒããŸãã¯æ©èœã¹ã³ãŒããããããšã«æ³šæããŠãã ãããvarã䜿çšããŠå€æ°ã宣èšããªãããã«ããŠãã ããã
æ©èœã«ããã«ãã»ã«å
æ©èœã¹ã³ãŒãã¯ãããã¯ã¹ã³ãŒãã«äŒŒãŠããŸãã颿°ã§å®£èšããã倿°ã¯ã颿°å ã§ã®ã¿ã¢ã¯ã»ã¹ã§ããŸããããã¯ãvarã§å®£èšããããã®ãå«ãããã¹ãŠã®å€æ°ã«é©çšãããŸãã
function sayFood () {
const food = 'Hamburger'
}
sayFood()
console.log(food)

颿°ã®å éšã«ãããšãã¯ã颿°ã®å€éšã§å®£èšããã倿°ã«ã¢ã¯ã»ã¹ã§ããŸãã
const food = 'Hamburger'
function sayFood () {
console.log(food)
}
sayFood()

颿°ã¯ãåŸã§é¢æ°ã®å€éšã§äœ¿çšã§ããå€ãè¿ãããšãã§ããŸãã
function sayFood () {
return 'Hamburger'
}
console.log(sayFood())

éé
ã¯ããŒãžã£ãŒã¯ãã«ãã»ã«åã®é«åºŠãªåœ¢åŒã§ããããã¯ãå¥ã®é¢æ°å ã®é¢æ°ã«ãããŸããã
//
function outsideFunction () {
function insideFunction () { /* ... */ }
}
outsideFunctionã§å®£èšããã倿°ã¯ãinsideFunctionã§äœ¿çšã§ããŸãã
function outsideFunction () {
const food = 'Hamburger'
console.log('Called outside')
return function insideFunction () {
console.log('Called inside')
console.log(food)
}
}
// outsideFunction, insideFunction
// insideFunction "fn"
const fn = outsideFunction()

ã«ãã»ã«åãšOOP
ãªããžã§ã¯ããäœæãããšãã¯ãäžéšã®ããããã£ããããªãã¯ïŒãããªãã¯ïŒã«ããä»ã®ããããã£ããã©ã€ããŒãïŒãã©ã€ããŒããŸãã¯ãã©ã€ããŒãïŒã«ããå¿ èŠããããŸãã
äŸãèŠãŠã¿ãŸããããè»ã®ãããžã§ã¯ãããããšããŸããããæ°ããã€ã³ã¹ã¿ã³ã¹ãäœæãããšãã«ãå€50ã®ãfuelãããããã£ãã€ã³ã¹ã¿ã³ã¹ã«è¿œå ããŸãã
class Car {
constructor () {
this.fuel = 50
}
}
ãŠãŒã¶ãŒã¯ãã®ããããã£ã䜿çšããŠãæ®ãã®çæã®éãæ±ºå®ã§ããŸãã
const car = new Car()
console.log(car.fuel) // 50
ãŠãŒã¶ãŒã¯èªåã§çæã®éãèšå®ããããšãã§ããŸãã
const car = new Car()
car.fuel = 3000
console.log(car.fuel) // 3000
è»ã®ã¿ã³ã¯ãæå€§100ãªããã«ã®çæãä¿æãããšããæ¡ä»¶ã远å ããŸããããè»ãå£ãå¯èœæ§ãããããããŠãŒã¶ãŒãèªåã§çæã®éãèšå®ã§ããããã«ããããããŸããã
ãããè¡ãã«ã¯2ã€ã®æ¹æ³ããããŸãã
- æ £äŸã«ããç§æè²¡ç£ã®äœ¿çš
- å®éã®ãã©ã€ããŒããã£ãŒã«ãã䜿çšãã
åæã«ããç§æè²¡ç£
JavaScriptã§ã¯ããã©ã€ããŒã倿°ãšããããã£ã¯éåžžãäžç·ã§ç€ºãããŸãã
class Car {
constructor () {
// "fuel" ,
this._fuel = 50
}
}
éåžžããã©ã€ããŒãããããã£ã管çããã¡ãœãããäœæããŸãã
class Car {
constructor () {
this._fuel = 50
}
getFuel () {
return this._fuel
}
setFuel (value) {
this._fuel = value
//
if (value > 100) this._fuel = 100
}
}
ãŠãŒã¶ãŒã¯ãgetFuelã¡ãœãããšsetFuelã¡ãœããã䜿çšããŠãããããçæã®éãæ±ºå®ããã³èšå®ããå¿ èŠããããŸãã
const car = new Car()
console.log(car.getFuel()) // 50
car.setFuel(3000)
console.log(car.getFuel()) // 100
ããããã_ fuelã倿°ã¯å®éã«ã¯ãã©ã€ããŒãã§ã¯ãããŸãããå€éšããã¢ã¯ã»ã¹ã§ããŸãã
const car = new Car()
console.log(car.getFuel()) // 50
car._fuel = 3000
console.log(car.getFuel()) // 3000
倿°ãžã®ã¢ã¯ã»ã¹ãå¶éããã«ã¯ãå®éã®ãã©ã€ããŒããã£ãŒã«ãã䜿çšããŸãã
æ¬åœã«ãã©ã€ããŒããã£ãŒã«ã
ãã£ãŒã«ãã¯ã倿°ãããããã£ãããã³ã¡ãœãããçµã¿åãããããã«äœ¿çšãããçšèªã§ãã
ãã©ã€ããŒãã¯ã©ã¹ãã£ãŒã«ã
ã¯ã©ã¹ã䜿çšãããšããïŒããã¬ãã£ãã¯ã¹ã䜿çšããŠãã©ã€ããŒã倿°ãäœæã§ããŸãã
class Car {
constructor () {
this.#fuel = 50
}
}
æ®å¿µãªããããã®ãã¬ãã£ãã¯ã¹ã¯ã³ã³ã¹ãã©ã¯ã¿ãŒã§ã¯äœ¿çšã§ããŸããã

ãã©ã€ããŒã倿°ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒã®å€éšã§å®çŸ©ããå¿ èŠããããŸãã
class Car {
//
#fuel
constructor () {
//
this.#fuel = 50
}
}
ãã®å Žåãå®çŸ©æã«å€æ°ãåæåã§ããŸãã
class Car {
#fuel = 50
}
çŸåšããïŒfuelã倿°ã¯ã¯ã©ã¹å ã§ã®ã¿äœ¿çšã§ããŸããã¯ã©ã¹å€ã§ã¢ã¯ã»ã¹ããããšãããšããšã©ãŒãã¹ããŒãããŸãã
const car = new Car()
console.log(car.#fuel)

倿°ãæäœããããã®é©åãªã¡ãœãããå¿ èŠã§ãã
class Car {
#fuel = 50
getFuel () {
return this.#fuel
}
setFuel (value) {
this.#fuel = value
if (value > 100) this.#fuel = 100
}
}
const car = new Car()
console.log(car.getFuel()) // 50
car.setFuel(3000)
console.log(car.getFuel()) // 100
ç§ã¯å人çã«ããã«ã²ãã¿ãŒãšã»ãã¿ãŒã䜿ãããšã奜ã¿ãŸãããã®æ§æã®æ¹ãèªã¿ããããšæããŸãã
class Car {
#fuel = 50
get fuel () {
return this.#fuel
}
set fuel (value) {
this.#fuel = value
if (value > 100) this.#fuel = 100
}
}
const car = new Car()
console.log(car.fuel) // 50
car.fuel = 3000
console.log(car.fuel) // 100
ãã©ã€ããŒãFFãã£ãŒã«ã
FFã¯ãã©ã€ããŒããã£ãŒã«ããèªåçã«äœæããŸãã倿°ã宣èšããå¿ èŠããããŸãããŠãŒã¶ãŒã¯å€éšãããã®å€æ°ã«ã¢ã¯ã»ã¹ã§ããªããªããŸããããã¯ã倿°ããããã¯ïŒãŸãã¯æ©èœïŒã¹ã³ãŒããæã£ãŠãããšããäºå®ã«ãããã®ã§ããããã©ã«ãã§ã«ãã»ã«åãããŸãã
function Car () {
const fuel = 50
}
const car = new Car()
console.log(car.fuel) // undefined
console.log(fuel) // Error: "fuel" is not defined
ã²ãã¿ãŒãšã»ãã¿ãŒã¯ããã©ã€ããŒã倿°ãçæããå¶åŸ¡ããããã«ã䜿çšãããŸãã
function Car () {
const fuel = 50
return {
get fuel () {
return fuel
},
set fuel (value) {
fuel = value
if (value > 100) fuel = 100
}
}
}
const car = new Car()
console.log(car.fuel) // 50
car.fuel = 3000
console.log(car.fuel) // 100
ãã®ãããªãã·ã³ãã«ãã€ç°¡åã«ïŒ
ã«ãã»ã«åã«é¢ããäºåççµè«
FFã«ãã»ã«åã¯ãããåçŽã§çè§£ãããããã®ã§ããããã¯ãJavaScriptã®éèŠãªéšåã§ããã¹ã³ãŒãã«åºã¥ããŠããŸãã
ã¯ã©ã¹ã®ã«ãã»ã«åã«ã¯ãïŒããã¬ãã£ãã¯ã¹ã®äœ¿çšãå«ãŸããŸãããããã¯ããé¢åãªå ŽåããããŸãã
FFã«å¯Ÿããã¯ã©ã¹-ãã
ããã¯ãã¯ã©ã¹ã®äœ¿çšã«å察ããäž»ãªè°è«ã§ããã©ãããŠïŒããã®æå³ã¯ããããã©ãã§ã©ã®ããã«äœ¿çšããããã«ãã£ãŠç°ãªãããã§ãããã®åäœã¯ãåå¿è ã ãã§ãªããçµéšè±å¯ãªéçºè ã«ãšã£ãŠãæ··ä¹±ãæãããšããããããŸãã
ãã ããããã®æŠå¿µã¯å®éã«ã¯ããã»ã©é£ãããããŸãããããã䜿çšã§ããã³ã³ããã¹ãã¯å šéšã§6ã€ãããŸãããããã®ã³ã³ããã¹ãã«åé¡ããªããã°ãããã§åé¡ã¯çºçããªãã¯ãã§ãã
ååä»ãã³ã³ããã¹ãã¯æ¬¡ã®ãšããã§ãã
- ã°ããŒãã«ã³ã³ããã¹ã
- äœæããããªããžã§ã¯ãã®ã³ã³ããã¹ã
- ãªããžã§ã¯ãã®ããããã£ãŸãã¯ã¡ãœããã®ã³ã³ããã¹ã
- ã·ã³ãã«ãªæ©èœ
- ç¢å°æ©èœ
- ã€ãã³ããã³ãã©ã³ã³ããã¹ã
ããããèšäºã«æ»ããŸããã¯ã©ã¹ãšFFã§ããã䜿çšãã詳现ãèŠãŠã¿ãŸãããã
ã¯ã©ã¹ã§ããã䜿çšãã
ã¯ã©ã¹ã§äœ¿çšãããå Žåãããã¯äœæãããã€ã³ã¹ã¿ã³ã¹ïŒããããã£/ã¡ãœããã³ã³ããã¹ãïŒãæããŸããããããã€ã³ã¹ã¿ã³ã¹ãã³ã³ã¹ãã©ã¯ã¿ãŒã§åæåãããçç±ã§ãã
class Human {
constructor (firstName, lastName) {
this.firstName = firstName
this.lastName = lastName
console.log(this)
}
}
const chris = new Human('Chris', 'Coyier')

ã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ã§ããã䜿çšãã
ããã颿°å ã§äœ¿çšããnewã䜿çšããŠã€ã³ã¹ã¿ã³ã¹ãäœæããå Žåãããã¯ã€ã³ã¹ã¿ã³ã¹ãæããŸãã
function Human (firstName, lastName) {
this.firstName = firstName
this.lastName = lastName
console.log(this)
}
const chris = new Human('Chris', 'Coyier')

FFã®FKãšã¯å¯Ÿç §çã«ãããã¯ãŠã£ã³ããŠãæããŸãïŒã¢ãžã¥ãŒã«ã®ã³ã³ããã¹ãã§ã¯ãããã¯éåžžããæªå®çŸ©ãã®å€ãæã¡ãŸãïŒã
// "new"
function Human (firstName, lastName) {
this.firstName = firstName
this.lastName = lastName
console.log(this)
}
const chris = Human('Chris', 'Coyier')

ãããã£ãŠãããã¯FFã§ã¯äœ¿çšããªãã§ãã ãããããã¯ãFFãšFCã®äž»ãªéãã®1ã€ã§ãã
FFã§ããã䜿çšãã
ãããFFã§äœ¿çšã§ããããã«ããã«ã¯ãããããã£/ã¡ãœããã³ã³ããã¹ããäœæããå¿ èŠããããŸãã
function Human (firstName, lastName) {
return {
firstName,
lastName,
sayThis () {
console.log(this)
}
}
}
const chris = Human('Chris', 'Coyier')
chris.sayThis()

ããã¯FFã§äœ¿çšã§ããŸãããå¿ èŠãããŸãããã€ã³ã¹ã¿ã³ã¹ãæã倿°ãäœæã§ããŸãããã®ä»£ããã«ããã®ãããªå€æ°ã䜿çšã§ããŸãã
function Human (firstName, lastName) {
const human = {
firstName,
lastName,
sayHello() {
console.log(`Hi, I'm ${human.firstName}`)
}
}
return human
}
const chris = Human('Chris', 'Coyier')
chris.sayHello()
humanã¯æç€ºçã«ã€ã³ã¹ã¿ã³ã¹ãæããŠãããããhuman.firstNameã¯this.firstNameãããæ£ç¢ºã§ãã
å®éãhuman.firstNameãèšè¿°ããå¿ èŠãããããŸããããã®å€æ°ã«ã¯åå¥ã¹ã³ãŒãããããããfirstNameã«å¶éã§ããŸãïŒããã¯ã倿°ã®å€ãå€éšç°å¢ããååŸãããå Žåã§ãïŒã
function Human (firstName, lastName) {
const human = {
firstName,
lastName,
sayHello() {
console.log(`Hi, I'm ${firstName}`)
}
}
return human
}
const chris = Human('Chris', 'Coyier')
chris.sayHello()

ããè€éãªäŸãèŠãŠã¿ãŸãããã
è€éãªäŸ
æ¡ä»¶ã¯æ¬¡ã®ãšããã§ãããfirstNameãããããã£ãšãlastNameãããããã£ãæã€ãHumanããããžã§ã¯ããšãsayHelloãã¡ãœããããããŸãã
Humanããç¶æ¿ãããDeveloperããããžã§ã¯ãããããŸããéçºè ã¯ã³ãŒãã®æžãæ¹ãç¥ã£ãŠããã®ã§ããã³ãŒããã¡ãœãããå¿ èŠã§ããããã«ãéçºè ãã£ã¹ãã«ããããšã宣èšããå¿ èŠããããããsayHelloã¡ãœãããäžæžãããå¿ èŠããããŸãã
ã¯ã©ã¹ãšFFã䜿çšããŠãæå®ãããããžãã¯ãå®è£ ããŸãããã
ã¯ã©ã¹
ãããžã§ã¯ããHumanããäœæããŸãã
class Human {
constructor (firstName, lastName) {
this.firstName = firstName
this.lastname = lastName
}
sayHello () {
console.log(`Hello, I'm ${this.firstName}`)
}
}
ãcodeãã¡ãœããã䜿çšããŠãDeveloperããããžã§ã¯ããäœæããŸãã
class Developer extends Human {
code (thing) {
console.log(`${this.firstName} coded ${thing}`)
}
}
ãsayHelloãã¡ãœãããäžæžãããŸãã
class Developer extends Human {
code (thing) {
console.log(`${this.firstName} coded ${thing}`)
}
sayHello () {
super.sayHello()
console.log(`I'm a developer`)
}
}
FFïŒããã䜿çšïŒ
ãããžã§ã¯ããHumanããäœæããŸãã
function Human () {
return {
firstName,
lastName,
sayHello () {
console.log(`Hello, I'm ${this.firstName}`)
}
}
}
ãcodeãã¡ãœããã䜿çšããŠãDeveloperããããžã§ã¯ããäœæããŸãã
function Developer (firstName, lastName) {
const human = Human(firstName, lastName)
return Object.assign({}, human, {
code (thing) {
console.log(`${this.firstName} coded ${thing}`)
}
})
}
ãsayHelloãã¡ãœãããäžæžãããŸãã
function Developer (firstName, lastName) {
const human = Human(firstName, lastName)
return Object.assign({}, human, {
code (thing) {
console.log(`${this.firstName} coded ${thing}`)
},
sayHello () {
human.sayHello()
console.log('I\'m a developer')
}
})
}
FfïŒãããªãïŒ
firstNameã¯åå¥çã«çŽæ¥ã¹ã³ãŒããããããããããçç¥ã§ããŸãã
function Human (firstName, lastName) {
return {
// ...
sayHello () {
console.log(`Hello, I'm ${firstName}`)
}
}
}
function Developer (firstName, lastName) {
// ...
return Object.assign({}, human, {
code (thing) {
console.log(`${firstName} coded ${thing}`)
},
sayHello () { /* ... */ }
})
}
ããã«é¢ããäºåççµè«
ç°¡åã«èšããšãã¯ã©ã¹ã§ã¯ããã䜿çšããå¿ èŠããããŸãããFFã§ã¯å¿ èŠãããŸããããã®å Žåãæ¬¡ã®çç±ã§FFã䜿çšããããšã奜ã¿ãŸãã
- ãã®ã³ã³ããã¹ãã¯å€æŽãããå¯èœæ§ããããŸã
- FFã䜿çšããŠèšè¿°ãããã³ãŒãã¯ãããçããããã¯ãªãŒã³ã§ãïŒå€æ°ã®èªåã«ãã»ã«åãåå ã§ãïŒ
ã¯ã©ã¹ãšFF-ã€ãã³ããã³ãã©ãŒ
OOPã«é¢ããå€ãã®èšäºã¯ãããã³ããšã³ãéçºè ãšããŠåžžã«ã€ãã³ããã³ãã©ãŒãæ±ã£ãŠãããšããäºå®ãèŠèœãšããŠããŸãããããã¯ãŠãŒã¶ãŒãšã®çžäºäœçšãæäŸããŸãã
ã€ãã³ããã³ãã©ãŒã¯ãã®ã³ã³ããã¹ãã倿Žãããããã¯ã©ã¹ã§ã€ãã³ããã³ãã©ãŒãæäœãããšåé¡ãçºçããå¯èœæ§ããããŸããåæã«ãFFã§ã¯ãã®ãããªåé¡ã¯çºçããŸããã
ãã ãããã®ã³ã³ããã¹ãã倿Žããæ¹æ³ãããã£ãŠããã°ããã®ã³ã³ããã¹ãã倿Žããããšã¯éèŠã§ã¯ãããŸãããç°¡åãªäŸãèŠãŠã¿ãŸãããã
ã«ãŠã³ã¿ãŒãäœæãã
ã«ãŠã³ã¿ãŒãäœæããã«ã¯ããã©ã€ããŒã倿°ãå«ããåŸãããç¥èã䜿çšããŸãã
ç§ãã¡ã®ã«ãŠã³ã¿ãŒã«ã¯2ã€ã®ãã®ãå«ãŸããŸãïŒ
- ã«ãŠã³ã¿ãŒèªäœ
- ãã®å€ãå¢ããããã®ãã¿ã³

ããŒã¯ã¢ããã¯æ¬¡ã®ããã«ãªããŸãã
<div class="counter">
<p>Count: <span>0</span></p>
<button>Increase Count</button>
</div>
ã¯ã©ã¹ã䜿çšããŠã«ãŠã³ã¿ãŒãäœæãã
äœæ¥ãç°¡åã«ããããã«ãã«ãŠã³ã¿ãŒããŒã¯ã¢ãããèŠã€ããŠCounterã¯ã©ã¹ã«æž¡ãããã«ãŠãŒã¶ãŒã«äŸé ŒããŸãã
class Counter {
constructor (counter) {
// ...
}
}
//
const counter = new Counter(document.querySelector('.counter'))
ã¯ã©ã¹ã§2ã€ã®èŠçŽ ãååŸããå¿ èŠããããŸãã
- ã«ãŠã³ã¿ãŒå€ãå«ã<span>-ã«ãŠã³ã¿ãŒãå¢å ãããšãã«ãã®å€ãæŽæ°ããå¿ èŠããããŸã
- <button>-ãã®èŠçŽ ã«ãã£ãŠåŒã³åºãããã€ãã³ãã®ãã³ãã©ãŒã远å ããå¿ èŠããããŸã
class Counter {
constructor (counter) {
this.countElement = counter.querySelector('span')
this.buttonElement = counter.querySelector('button')
}
}
次ã«ãcountElementã®ããã¹ãã³ã³ãã³ãã§ãcountã倿°ãåæåããŸããæå®ãã倿°ã¯ãã©ã€ããŒãã§ããå¿ èŠããããŸãã
class Counter {
#count
constructor (counter) {
// ...
this.#count = parseInt(countElement.textContent)
}
}
ãã¿ã³ãæŒããšãã«ãŠã³ã¿ãŒã®å€ã1å¢å ããŸããããã¯ããincreaseCountãã¡ãœããã䜿çšããŠå®è£ ããŸãã
class Counter {
#count
constructor (counter) { /* ... */ }
increaseCount () {
this.#count = this.#count + 1
}
}
次ã«ãDOMãæŽæ°ããå¿ èŠããããŸããå¢å ã«ãŠã³ãå ã§åŒã³åºããããupdateCountãã¡ãœããã䜿çšããŠãããå®è£ ããŸãããã
class Counter {
#count
constructor (counter) { /* ... */ }
increaseCount () {
this.#count = this.#count + 1
this.updateCount()
}
updateCount () {
this.countElement.textContent = this.#count
}
}
ã€ãã³ããã³ãã©ãŒã远å ããå¿ èŠããããŸãã
ã€ãã³ããã³ãã©ãŒã®è¿œå
this.buttonElementã«ãã³ãã©ãŒã远å ããŸããããæ®å¿µãªãããincreaseCountãã³ãŒã«ããã¯é¢æ°ãšããŠäœ¿çšããããšã¯ã§ããŸãããããã«ããããšã©ãŒãçºçããŸãã
class Counter {
// ...
constructor (counter) {
// ...
this.buttonElement.addEventListener('click', this.increaseCount)
}
//
}

ããã¯buttonElementïŒã€ãã³ããã³ãã©ã³ã³ããã¹ãïŒãæããŠãããããäŸå€ãã¹ããŒãããŸãããã®å€ãã³ã³ãœãŒã«ã«åºåããããšã§ãããã確èªã§ããŸãã

ãã®å€ã¯ãã€ã³ã¹ã¿ã³ã¹ãæãããã«å€æŽããå¿ èŠããããŸããããã¯2ã€ã®æ¹æ³ã§è¡ãããšãã§ããŸãã
- ãã€ã³ãã䜿çšãã
- ç¢å°æ©èœã䜿çšãã
ã»ãšãã©ã¯æåã®æ¹æ³ã䜿çšããŸãïŒãã ãã2çªç®ã®æ¹æ³ã®æ¹ãç°¡åã§ãïŒã
ãã€ã³ãã䜿çšããã€ãã³ããã³ãã©ãŒã®è¿œå
bindã¯æ°ãã颿°ãè¿ããŸããæåã®åŒæ°ãšããŠããããæããªããžã§ã¯ãïŒããããã€ã³ãããããªããžã§ã¯ãïŒãæž¡ãããŸãã
class Counter {
// ...
constructor (counter) {
// ...
this.buttonElement.addEventListener('click', this.increaseCount.bind(this))
}
// ...
}
åäœããŸãããèŠæ ãããããããŸãããããã«ããã€ã³ãã¯ãåå¿è ãæ±ãã«ããé«åºŠãªæ©èœã§ãã
ç¢å°æ©èœ
ãšããããç¢å°é¢æ°ã«ã¯ç¬èªã®ããããããŸããã圌ãã¯ãããèªåœïŒå€éšïŒç°å¢ããåããŸãããããã£ãŠãã«ãŠã³ã¿ã³ãŒãã¯æ¬¡ã®ããã«æžãçŽãããšãã§ããŸãã
class Counter {
// ...
constructor (counter) {
// ...
this.buttonElement.addEventListener('click', () => {
this.increaseCount()
})
}
//
}
ããã«ç°¡åãªæ¹æ³ããããŸããç¢å°é¢æ°ãšããŠincreaseCountãäœæã§ããŸãããã®å Žåãããã¯ã€ã³ã¹ã¿ã³ã¹ãæããŸãã
class Counter {
// ...
constructor (counter) {
// ...
this.buttonElement.addEventListener('click', this.increaseCount)
}
increaseCount = () => {
this.#count = this.#count + 1
this.updateCounter()
}
// ...
}
ã³ãŒã
å®å šãªãµã³ãã«ã³ãŒãã¯æ¬¡ã®ãšããã§ãã
FFã䜿çšããŠã«ãŠã³ã¿ãŒãäœæãã
æåã¯äŒŒãŠããŸã-ã«ãŠã³ã¿ãŒããŒã¯ã¢ãããèŠã€ããŠæž¡ãããã«ãŠãŒã¶ãŒã«äŸé ŒããŸãã
function Counter (counter) {
// ...
}
const counter = Counter(document.querySelector('.counter'))
å¿ èŠãªèŠçŽ ãååŸããŸããããã¯ããã©ã«ãã§ãã©ã€ããŒãã«ãªããŸãã
function Counter (counter) {
const countElement = counter.querySelector('span')
const buttonElement = counter.querySelector('button')
}
ãcountã倿°ãåæåããŠã¿ãŸãããã
function Counter (counter) {
const countElement = counter.querySelector('span')
const buttonElement = counter.querySelector('button')
let count = parseInt(countElement.textContext)
}
ã«ãŠã³ã¿å€ã¯ããincreaseCountãã¡ãœããã䜿çšããŠå¢å ããŸããéåžžã®é¢æ°ã䜿çšã§ããŸãããç§ã¯å¥ã®ã¢ãããŒãã奜ã¿ãŸãã
function Counter (counter) {
// ...
const counter = {
increaseCount () {
count = count + 1
}
}
}
DOMã¯ãincreaseCountå ã§åŒã³åºããããupdateCountãã¡ãœããã䜿çšããŠæŽæ°ãããŸãã
function Counter (counter) {
// ...
const counter = {
increaseCount () {
count = count + 1
counter.updateCount()
},
updateCount () {
increaseCount()
}
}
}
this.updateCountã®ä»£ããã«counter.updateCountã䜿çšããŠããããšã«æ³šæããŠãã ããã
ã€ãã³ããã³ãã©ãŒã®è¿œå
counter.increaseCountãã³ãŒã«ããã¯ãšããŠäœ¿çšããŠãbuttonElementã«ã€ãã³ããã³ãã©ãŒã远å ã§ããŸãã
ããã¯äœ¿çšããŠããªãã®ã§æ©èœããŸãããããã£ãŠããã³ãã©ãŒãããã®ã³ã³ããã¹ãã倿Žããããšã¯éèŠã§ã¯ãããŸããã
function Counter (counterElement) {
//
//
const counter = { /* ... */ }
//
buttonElement.addEventListener('click', counter.increaseCount)
}
ããã®æåã®æ©èœ
ããã¯FFã§äœ¿çšã§ããŸãããã¡ãœããã®ã³ã³ããã¹ãã§ã®ã¿äœ¿çšã§ããŸãã
次ã®äŸã§ã¯ãcounter.increaseCountãåŒã³åºããšcounter.updateCountãåŒã³åºãããŸããããã¯ãã«ãŠã³ã¿ãŒãæããŠããããã§ãã
function Counter (counterElement) {
//
//
const counter = {
increaseCount() {
count = count + 1
this.updateCount()
}
}
//
buttonElement.addEventListener('click', counter.increaseCount)
}
ãã ãããã®å€ã倿ŽãããŠãããããã€ãã³ããã³ãã©ãŒã¯æ©èœããŸããããã®åé¡ã¯ãã€ã³ãã§è§£æ±ºã§ããŸãããç¢å°é¢æ°ã§ã¯è§£æ±ºã§ããŸããã
ããã®2çªç®ã®æ©èœ
FFæ§æã䜿çšããå Žåãã¡ãœããã¯é¢æ°ã®ã³ã³ããã¹ãã§äœæããããããç¢å°é¢æ°ã®åœ¢åŒã§ã¡ãœãããäœæããããšã¯ã§ããŸãããããã¯ãŠã£ã³ããŠãæããŸãïŒ
function Counter (counterElement) {
// ...
const counter = {
//
// , this window
increaseCount: () => {
count = count + 1
this.updateCount()
}
}
// ...
}
ãããã£ãŠãFFã䜿çšããå Žåã¯ãããã䜿çšããªãããšã匷ããå§ãããŸãã
ã³ãŒã
ã€ãã³ããã³ãã©ãŒã®è©æ±º
ã€ãã³ããã³ãã©ãŒã¯thisã®å€ã倿Žãããããããã¯æ éã«äœ¿çšããŠãã ãããã¯ã©ã¹ã䜿çšãããšãã¯ãç¢å°é¢æ°ã®åœ¢åŒã§ã€ãã³ããã³ãã©ã³ãŒã«ããã¯ãäœæããããšããå§ãããŸããããããã°ããµãŒãã¹ããã€ã³ãããããã«é Œãå¿ èŠã¯ãããŸããã
FFã䜿çšããå Žåã¯ãããããŸã£ãã䜿çšããªãããšããå§ãããŸãã
çµè«
ãã®ããããã®èšäºã§ã¯ãJavaScriptã§ãªããžã§ã¯ããäœæãã4ã€ã®æ¹æ³ã«ã€ããŠèª¬æããŸããã
- ã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°
- ã¯ã©ã¹
- ãªããžã§ã¯ãã®ãªã³ã¯
- å·¥å Žæ©èœ
ãŸããã¯ã©ã¹ãšFFããªããžã§ã¯ããäœæããããã®æé©ãªæ¹æ³ã§ãããšããçµè«ã«éããŸããã
次ã«ããµãã¯ã©ã¹ã¯ã¯ã©ã¹ã䜿çšããŠäœæããæ¹ãç°¡åã§ããããšãããããŸããããã ããåæã®å Žåã¯FFã䜿çšããããšããå§ãããŸãã
第3ã«ãã«ãã»ã«åã«é¢ããŠã¯ãã¯ã©ã¹ãããFFã®æ¹ãæå©ã§ãããšèŠçŽããŸãããã¯ã©ã¹ã¯ç¹å¥ãªãïŒããã¬ãã£ãã¯ã¹ã䜿çšããå¿ èŠããããFFã¯å€æ°ãèªåçã«ãã©ã€ããŒãã«ããããã§ãã
第4ã«ãFFã䜿çšãããšããããã€ã³ã¹ã¿ã³ã¹åç §ãšããŠäœ¿çšããã«å®è¡ã§ããŸããã¯ã©ã¹ã§ã¯ããããã€ãã³ããã³ãã©ãŒã«ãã£ãŠå€æŽãããå ã®ã³ã³ããã¹ãã«æ»ãããã«ãããã€ãã®ããªãã¯ã«é Œãå¿ èŠããããŸãã
ããã§ãã¹ãŠã§ãããã®èšäºã楜ããã§ããã ããã§ãããããæž èŽããããšãããããŸããã