function User(first, last) {
// this = {}
this.firstName = first
this.lastName = last
// return this
}
User.prototype.getFullName = function() {
return `${this.firstName}` `${this.lastName}`
}
const amy = new User('amy', 'Clarke')
const zooyaho = new User('zooyaho', 'Park')
console.log(amy)
console.log(zooyaho.getFullName)
๐ firstName๊ณผ lastName์ user๋ผ๋ ์์ฑ์ ํจ์๊ฐ ์คํ๋ ๋๋ง๋ค ๋ค๋ฅธ๋ด์ฉ์ด ๋ค์ด์ฌ ์ ์๊ธฐ ๋๋ฌธ์ ํต์ผํด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ด๋ ค์
๐ getFullName์ ๋ก์ง์ด ๊ฐ๊ธฐ ๋๋ฌธ์ ํต์ผํํด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์์์ (ํจ์๋ฅผ ์ฐธ์กฐํ์ฌ ์ฌ์ฉํจ)
- ์ผ๋ฐ(Nomal) ํจ์๋ "ํธ์ถ ์์น"์ ๋ฐ๋ผ this์ ์
- ํ์ดํ ํจ์๋ ์์ ์ด ์ ์ธ๋ "ํจ์ ๋ฒ์"์์ this์ ์
๐พ #1
const zooyaho = {
name: 'Zooyaho',
nomal: function() {
console.log(this.name)
},
arrow: ()=>{
console.log(this.name)
}
}
zooyaho.nomal() // Zooyaho
zooyaho.arrow() // undefined
const amy = {
name: 'Amy',
nomal: zooyaho.nomal,
arrow: zooyaho.arrow
}
amy.nomal() // amy
amy.arrow() // undefined
๐ ํ์ดํ ํจ์์์ this๋ ํ์ดํํจ์๊ฐ ๋ง๋ค์ด์ง๋ ํจ์ ์์ญ์์ ์ ์๊ฐ ๋จ
๐พ #2
/* ์ผ๋ฐํจ์์์ this */
const timer = {
name: 'Zooyaho~!',
timeout: function() {
setTimeout(function(){
console.log(this.name)
},2000)
}
}
timer.timeout() // undefined
๐ this๋ ์ผ๋ฐํจ์์์ ๋ง๋ค์ด์ ธ ์๊ณ setTimeoutํจ์ ๋ก์ง ์ด๋๊ฐ์์ ์คํ๋๊ธฐ ๋๋ฌธ์ undefined๋ฅผ ๋ฐํํจ
๐พ #3
/* ํ์ดํํจ์์์ this */
const timer = {
name: 'Zooyaho~!',
timeout: function() {
setTimeout(()=>{
console.log(this.name)
},2000)
}
}
timer.timeout() // Zooyaho~!
๐ ํ์ดํํจ์์ this๋ function()์ this์ด๊ณ function()์ this๋ timer๋ฅผ ๊ฐ๋ฆฌํค๋ฏ๋ก ํ์ดํํจ์์ this.name์ Zooyaho~!๋ฅผ ๊ฐ๋ฆฌํด
๐ setTimeout(), setInterval()๋ผ๋ ํ์ด๋จธํจ์๋ฅผ ์ฌ์ฉํ ๋๋ ์ฝ๋ฐฑ์ผ๋ก ์ผ๋ฐํจ์๋ณด๋ค๋ ํ์ดํํจ์๋ฅผ ์ฌ์ฉํ๋๊ฒ์ด ํ์ฉ๋๊ฐ ๋์
class Person {
// ์์ฑ์
constructor(name) {
// ์ธ์คํด์ค ์์ฑ ๋ฐ ์ด๊ธฐํ
this.name = name;
}
sayHi() {
consoel.log(`Hi My name is ${this.name}`);
}
}
const me = new Person("Lee");
me.sayHi(); // Hi My name is Lee
๐พ ์์ฑ์ ํจ์์ ์ ์ ๋ฉ์๋ ์์ฑ
function Person(name) {
this.name = name;
}
Person.sayHi = function () {
console.log("Hi");
};
Person.sayHi(); // Hi
๐พ class์์์ ์ ์ ๋ฉ์๋ ์์ฑ
class Person(){
constructor(name){
this.name = name;
}
// ์ ์ ๋ฉ์๋
static sayHi(){
consoel.log(`Hi`);
}
}
Person.sayHi(); // Hi
๐พ ์ ์ ๋ฉ์๋๋ ์ธ์คํด์ค๋ก ํธ์ถํ ์ ์๋ค
class Person(){
constructor(name){
this.name = name;
}
// ์ ์ ๋ฉ์๋
static sayHi(){
consoel.log(`Hi`);
}
}
const me = new Person('Lee');
me.sayHi(); // TypeError
๐พ #1
// ๊ฐ์ฒด ์ ๋ฉ์๋ ์ถ์ฝํ
const heropy = {
name: 'zooyaho',
normal() {
console.log(this.name)
}
}
๐ normal(){} == normal: function(){}
๐พ #2
// ์์ฑ์ํจ์ ์ถ์ฝํ
class User {
constructor(first, last) {
this.firstName = first
this.lastName = last
}
getFullName() {
return `${this.firstName} ${this.lastName}`
}
}
๐ getFullName()๋ฉ์๋๋ฅผ prototype์์ฑ์ ์์ฑํ์ง ์๊ณ prototype์ ๋ฉ์๋๋ก ์์ฑํ ์ ์์!!!
class Vehicle {
constructor(name, wheel) {
this.name = name
this.wheel = wheel
}
}
const myBicycle = new Vehicle('๋๋ฐ ์์ ๊ฑฐ', 2)
console.log(myBicycle)
class Car extends Vehicle {
constructor(name, wheel, license) {
super(name, wheel)
this.license = license
}
}
const myCar = new Car('๋ฒค์ธ ', 4, true)
console.log(myCar)
์ฐธ๊ณ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive