์ด๊ฒ์ ์๋ ํ๋์ ํน์ ์ฑ๋ฆฐ์ง์ ๋ํด ์ด๋ ธ์ง๋ง์ด ์น์ ์์ ๋ค๋ฅธ ๋ช ๊ฐ์ง ์ฌํญ์ ์์ ์ฐจ๋ ธ์ผ๋ฏ๋ก์ด ๋ฌธ์ ๋ฅผ ํ๋์ ํธ (๊ฐ๊ฐ์ ๋ํ ์ค๋ช )๋ก ํตํฉํ๊ฒ ์ต๋๋ค. @HKuz , ์๋ง๋ ์ด๊ฒ์ ๋ํ ๋ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ์๋ค๋ฉด, ๋๋ ๋น์ ์ด ์์์ผ ํ ์ฌ๋์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ๋น ๋ฅธ ๊ฒ์์ํ์ง๋ง ์๋ฌด๊ฒ๋ ์ฐพ์ ์ ์์์ต๋๋ค.
์ ๋ฐ์ ์ผ๋ก-์ด๋ฌํ ๋์ ์ ํ๋ฅญํ๋ค๊ณ ์๊ฐํฉ๋๋ค! _ ํ์คํ _ ๊ธฐ์กด OOP ์น์ ์ ๋นํด _major_ ๊ฐ์ !!!! ๋๊ฐ ๋ง๋ค์ ๋ ์ ํ์ด์ !!
์ด ์ฑ๋ฆฐ์ง๋ ๋ค์ ์ฌํญ๋ง์ ํด๊ฒฐ์ฑ ์ผ๋ก ๋ฐ์๋ค์ ๋๋ค.
console.log(dog.name);
console.log(dog.numLegs);
๊ทธ๋ฌ๋ ๋ ๊ฐ์ ๋ณ๋ ๋ฌธ์ ์ฌ์ฉํด์ผํ๋ค๊ณ ๋ช ์ ์ ์ผ๋ก ๋ช ์ํ์ง ์์ผ๋ฉฐ ๋ค์์ ํต๊ณผํ์ง ์์ต๋๋ค.
console.log(dog.name, dog.numLegs);
2 ๊ฐ์ ๋ณ๋ console.log()
๋ฌธ์ ์์ฑํด์ผํ๋ค๊ณ ์ง์ ํ๊ฑฐ๋ ๋ ์๋ฃจ์
์ ๋ชจ๋ ์์ฉํ๋๋ก ํ
์คํธ๋ฅผ ๋ฆฌํฉํฐ๋งํด์ผํ๋ค๊ณ ์๊ฐํ๊ณ ์์ต๋๋ค. ํ์์ ์ต์
์ ์ ํธํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์๊ฐ?
myHouse instanceof House;
๊ฐ ์์ฑ๋๋ฉด linter๋ ๊ฒฝ๊ณ Expected an assignment of function call and instead saw an expression
ํ์ํฉ๋๋ค. ํ์ง๋ง ๋์ ์ ํต๊ณผํฉ๋๋ค.function House(numBedrooms) {
this.numBedrooms = numBedrooms;
}
๊ทธ๋ฌ๋์ด ๋์ ์์ ๊ทธ๋ค์ ๋ค์ ๊ตฌ๋ฌธ์ผ๋ก ์ ํํฉ๋๋ค.
let House = function(numBedrooms) {
this.numBedrooms = numBedrooms;
}
์ด๊ฒ์ ํผ๋์ ์์ธ์ด ๋ ์์๋ ๋ฌธ์ ๊ฐ ์๋๋๋ค. ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ชจ๋ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ฐจ์ด์ ์ ๊ตฌ์ฒด์ ์ผ๋ก ํ์ธํด์ผํ๋ฉฐ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์น์ ์ ์ฒด์์ ๊ตฌ๋ฌธ์ ์ผ๊ด๋๊ฒ ์ ์งํด์ผํฉ๋๋ค. ์๋ง๋ ๋ ๋ค ์๊ฐํ๋ ๊ฒ์ด ์ข์ ์๊ฐ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ด๊ฒ์ ๋ํ ๊ด์ฐฐ ์ผ ๋ฟ์ด๊ณ ๋ค๋ฅธ ์๊ฒฌ์ด ๋ฌด์์ธ์ง ๊ถ๊ธํฉ๋๋ค.ํ์ง๋ง์ด ๋์ ์ hasOwnProperty
๋ณด๋ค for...in
๋ฅผ ์ค์ฌ์ผ๋ก ์งํ๋๋ ๊ฒ ๊ฐ์ต๋๋ค. for...in
๋ ๊ทธ๋ ์ง ์์ต๋๋ค. ์์ง์ด ์น์
์์ ์ ์ ํ๊ฒ ์ค๋ช
๋์์ต๋๋ค.
์ฌ๋๋ค์ด ๋๋จธ์ง ์ปค๋ฆฌํ๋ผ์ ํตํด ์์
ํ๋ค๊ณ ๊ฐ์ ํ๋ค๋ฉด, ์ด๊ฒ์ ์ ์ด๋ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์น์
์์ ๋ค๋ฃจ๊ธฐ ๋๋ฌธ์ ๊ด์ฐฎ๋ค๊ณ ์๊ฐํฉ๋๋ค.ํ์ง๋ง ์น์
์ด ์๋ก ๋
๋ฆฝ์ ์ด๊ณ ๋ค์๊ณผ ๊ฐ์ ์ ์ ์กฐ๊ฑด์ด ํ์ํ์ง ์์ ๊ฒฝ์ฐ ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ๋ค์ ๋ฐฉ๋ฌธํ๊ณ ์ถ์ต๋๊น?
์ด ๋ฌธ์ ๋ ๋ค์ ๋ ์๋ฃจ์ ์ค ํ๋๋ก ํต๊ณผ๋ฉ๋๋ค.
function joinDogFraternity(candidate) {
if (candidate instanceof Dog) {
return true;
}
return false;
}
// OR:
function joinDogFraternity(candidate) {
if (candidate.constructor === Dog) {
return true;
}
return false;
}
๋ณธ๋ฅ์ ์ผ๋ก ์ฌ๋๋ค์ด ์ ์ํ ํด๊ฒฐ์ฑ ์ ๋จผ์ ์๋ ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ํฐ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ์ง ์์ง๋ง, ์ ํตํ ์บ ํ์นด๊ฐ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ชจ๋ ์๋ํ๊ณ ์ํ ๋ ์ด๊ฒ์ด ๋ฌธ์ ๊ฐ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ์ด๊ฒ์ ์ง์ ํ์ญ์์ค.
"message: 'your solution should use the constructor property'"
๋ผ๋ ํ
์คํธ ์ผ์ด์ค๋ฅผ ์ถ๊ฐํ๊ณ ์ ๊ท์์ผ๋ก ํ์ธํ ์ ์์ต๋๋ค.
์ด ๋์ ์ ์ฝ๊ฐ ํผ๋ ์ค๋ฝ์ต๋๋ค. ์ ๋ชฉ์ ์์์ ์๋ฏธํ์ง๋ง ์์์ ๋์ ์์ ์ธ๊ธ ๋ ์ ์ด ์์ต๋๋ค. ๋ค์ ๋์ ๊ณผ ๊ด๋ จ์ด ์๋ค๋ ๊ฒ์ ์๊ณ ์์ผ๋ฏ๋ก ์บ ํ ์ฐธ๊ฐ์๋ ๋นจ๋ฆฌ ์์๋ผ ์ ์์ง๋ง ์ ์๋ ๋ฐฉ์์ ์ฌ์ ํ โโ์ฝ๊ฐ ์๋ง์
๋๋ค. ๋ํ ๋์ ์ด ๋๋ ๋ Animal
์ํผ ํ์
์ ๋ง๋ค์์ง ๋ง์ด ์์ ์์ Animal
๋ Cat
์ฐ๊ฒฐ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ฝ๊ฐ ํผ๋์ค๋ฌ์์ง๋๋ค Dog
. ํผ๋์ ์ํํ๊ธฐ ์ํด ์ฝ๊ฐ์ ๋ณ๊ฒฝ์ด ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด ๋ฌธ๊ตฌ๋ ๋ค์ ๋์ ์์ ๋์์ต๋๋ค.
์ด๋ฒ ๋์ ๊ณผ ๋ค์ ๋์ ์์๋ ๋ค์ ์ ์ํ์ง ์๊ณ Bird์ Dog ๋ด๋ถ์์ Animal์ ๋ฉ์๋๋ฅผ ์ฌ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ค๋ฃฐ ๊ฒ์ ๋๋ค. ์์์ด๋ผ๋ ๊ธฐ์ ์ ์ฌ์ฉํฉ๋๋ค.
์๋ง๋ ์ฌ๋ฌผ์ ์ฐ๊ฒฐํ๊ธฐ ์ํด ์ด์ ์ ์ฌํ ๋ ๋์ ์์ค์ ๊ฐ์๊ฐ ๋์ 3 ๊ฐ๋ฅผ ๋ชจ๋ ์ฐ๊ฒฐํ๋์ด ์ฑ๋ฆฐ์ง์์ ์ฃผ์ด์ง ์ ์์ผ๋ฏ๋ก ๊ทธ๊ฒ๋ค์ด ์ํ์ค๋ผ๋ ๊ฒ์ ์ดํดํ๊ณ ์ค์ ๋ก ์ฑ๋ฆฐ์ง์ ์ ๋ชฉ์ด ๋ถ์ ๊ฐ๋ ์ ์๊ฐํ๊ณ ๊ทธ๊ฒ์ ๋ง๋ญ๋๋ค ์ด ๋์ ์ ๋์์ ์ฐ๋ฆฌ๋ ์์ง ๋๋์ง ์์๋ค๋ ๊ฒ์ ๋ถ๋ช ํํฉ๋๋ค.
์ฌ๊ธฐ์ ๋งค์ฐ ์ฌ์ํ ๋ฌธ์ -์ด์ ๋ํ ์๋์ ์ผ๋ถ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
// Add your code below this line
let duck
let beagle
duck.eat(); // Should print "nom nom nom"
beagle.eat(); // Should print "nom nom nom"
์ด๊ฒ์ linter ์ค๋ฅ๋ฅผ ๋ฐ์์ํต๋๋ค. ๋์ ๋ค์์ ์ ์ํฉ๋๋ค.
์ฌ๊ธฐ์ ๋งค์ฐ ์ฌ์ํ ๋ฌธ์ -์ด์ ๋ํ ์๋์ ์ผ๋ถ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
let duck; // change this line
let beagle; // change this line
duck.eat(); // Should print "nom nom nom"
beagle.eat(); // Should print "nom nom nom"
@ no-stack-dub-sack-์ด๊ฒ๋ค์ ๋ชจ๋ ํ๋ฅญํ ํฌ์ธํธ์ด๋ฉฐ ์ด์ ์คํ๋ผ์ธ ์ํ ์์ง๋ง์ด ์น์ ์ ๋ํ ๋ฌธ์ ๋ฅผ ๋ณด์ง ๋ชปํ์ต๋๋ค. ์ด ์น์ ์ ์์ธํ ์ฝ์ด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค ๐ ์ฌ๊ธฐ ๋ด ์๊ฐ์ด ์์ต๋๋ค (tl; dr-๋น์ ์ด ๊ฐ์ ธ์จ ๋ชจ๋ ๊ฒ์ ๋์ํฉ๋๋ค) :
Use Dot Notation to Access the Properties of an Object
: ๋๊ตฐ๊ฐ console.log
๋ฌธ์ ์ฌ์ฉํ๋ฉด ํ
์คํธ๋ฅผ ํต๊ณผํด์ผํฉ๋๋ค.Verify an Object's Constructor with instanceof
: ๋๋ฝ ๋ ์ธ๋ฏธ์ฝ๋ก ์ ์์ ํ๊ณ House
์ ์ ๋ฐฉ์์ ๋ํด ์ผ๊ด์ฑ์ ์ ์งํด์ผํฉ๋๋ค. JS์๋ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ง๋ง ์ฒ์ ๋ฐฐ์ฐ๋ ์ฌ๋๋ค์ ํผ๋ ํ ํ์๊ฐ ์์ต๋๋ค.Understanding Own Properties
: for...in
์ ๋ํ ๊ทํ์ ์์ -์ฐ๋ฆฌ๋ ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฏธ ์ปค๋ฆฌํ๋ผ์์ ๋ค๋ฃฌ ๊ฐ๋
์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค๊ณ ์๊ฐํ์ต๋๋ค. ์บ ํ ์ฐธ๊ฐ์๋ ์ํ๋๋๋ก ์ด๋ํ ์ ์์ง๋ง ์ฃผ์ ์ ๋ํ ํ๋ฆ์ด ์์ต๋๋ค. (๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฌธ์ ๊ฐ ์์ ์ ๋๋ฌํ๊ธฐ ์ ์ ํญ๋ชฉ์ ๋ค์ ์ฐพ์์ผํ๋ ๊ฒฝ์ฐ ์ฑ๋ฆฐ์ง๊ฐ ๊ธธ๊ฑฐ๋ ๋ฐ๋ณต ๋ ์ ์์ต๋๋ค.) ์ฆ, ๊ตฌ๋ฌธ์ ๊ฐ๋ตํ๊ฒ ์ค๋ช
ํ๋ ์์ ๋ฐ๋ก ์๋์ ๋ฉ๋ชจ๋ฅผ ์
๋ ฅํ๋ ๊ฒ์ด ๋์์ด ๋ ์ ์์ต๋๋ค ( " for...in
๋ ...).Understand the Constructor Property
: ์ง์นจ์ ์์ฑ์๋ฅผ ์ฌ์ฉํ์ฌ ์ถ๊ฐ ํ ์ ์ ๋์ํฉ๋๋ค.Use Inheritance So You Don't Repeat Yourself
: ๋ค, ๋์ ์ ๋ ์ ๋ฌถ์ ์์๋ ์ข์ ์ Inherit Behaviors from a Supertype
: ๋ฐ๋์ ์ธ๋ฏธ์ฝ๋ก ์ ์ถ๊ฐํด์ผํ๋ฉฐ ์ฃผ์๋ ๋์์ด๋ฉ๋๋ค.์ด ์์ ์ํ๊ณ ์ถ์ผ๋ฉด ์๋ ค์ฃผ์ธ์. ๋ค๋ฅธ ์น์ ์ผ๋ก ์ด๋ํฉ๋๋ค (ํ๋ฃจ๋ ์ดํ ์์ ์์ ํ ์ ์์). ์๋๋ฉด ๋์์ด ํ์ํ๋ฉด ์ด ์ ์์ต๋๋ค ๐
@HKuz ์ฟจ, ๊ฐ์ฌํฉ๋๋ค! ์น์ ์ ๋ง๋ฌด๋ฆฌํ๊ณ ๋๊ธ์ด ์์ผ๋ฉด ๋ช ๊ฐ ๋ ์ถ๊ฐํ๋ฉด ๊ทธ ์์ ์์ ๊ฒฐ์ ํ ์ ์์ง๋ง Help Wanted๋ก ์ฌ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ณ์ ๊ฒ์ ํ ๊ฒ์ ๋๋ค.
์ด ๋ฌธ์ ๋ ๋ค์ ํ ์คํธ ์ฌ๋ก๋ก ์ธํด ์ฝ๊ฐ ํผ๋ ์ค๋ฝ์ต๋๋ค.
Dog should have the bark() method as an own property.
์ด ๋ถ๋ถ์ ์๋ฃจ์ ์ ๋ค์์ ์ฐพ๊ณ ์์ต๋๋ค.
Dog.prototype.bark = function() {
console.log('Woof!');
};
Dog.prototype.hasOwnProperty('bark')
๊ฐ true
๋ฐํํ๋ ๋์ (๋ฌผ๋ก ๋ง์ต๋๋ค), ํผ๋์ ์์ธ์ ์ฌ๊ธฐ ( ๋ชจ๋ ์์ฑ์ ๋ํ ๋ฐ๋ณต )์์ ๋น๋กฏ๋ฉ๋๋ค.
์ ๋ณด ์บ ํ ์ฐธ๊ฐ์๊ฐ์ด ์์ ๊น์ง ํฌ๊ธฐํ๋ฉด ํ
์คํธ๋ฅผ ํต๊ณผํ๊ธฐ ์ํด bark
๋ฉ์๋๋ฅผ Dog
๋์
์ฐจ์ด์ ์ Dog
์ธ์คํด์ค์ ๊ฒฝ์ฐ bark
๋ own
์์ฑ์ด _not_๋์ง๋ง Dog.prototype
์ own
์์ฑ์ด๋ผ๋ ๊ฒ์
๋๋ค Dog.prototype
. ๋ฐ๋ผ์ ์ด๊ฒ์ ์ด๋ฌํ ๊ฐ๋
์ ๋ฐฉ๊ธ ์๊ฐ๋ฐ์ ์ฌ๋์๊ฒ๋ ์ฝ๊ฐ ํผ๋ ์ค๋ฝ์ต๋๋ค.
๊ฐ์ฅ ๊ฐ๋จํ ํด๊ฒฐ์ฑ ์ ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋๋ค.
Dog.prototype should have the bark() method as an own property.
ํ์ง๋ง, ์บ ํ ์ฐธ๊ฐ์๋ค์๊ฒ ํ๋กํ ํ์
์ prototype
์์ฑ์ด ์ค์ ๋ก ํด๋น ํ๋กํ ํ์
์ own
์์ฑ์์ ์๋ฆฌ๊ธฐ์ํ ๊ฐ๋จํ ์ค๋ช
์์ ์คํ :
๋๋ "... bird
์ ์ ์๋ฅผ ๋ฒ์ด๋ฌ๋ค"๋ผ๊ณ ์๊ฐํ๋ค. ?
์ด ์ฑ๋ฆฐ์ง์ ๋ํ ํฐ ๋ฌธ์ ๋ ์์ต๋๋ค. ์ ์ ์ผ๋ฟ์
๋๋ค. ์ต๋ช
์ IIFE
๊ฐ ๋ ์ผ๋ฐ์ ์ธ ํจํด (๊ทธ๋ฆฌ๊ณ ๋ค์ ์ฑ๋ฆฐ์ง์์ ์ฌ์ฉ๋๋ ํจํด)์ด๋ผ๋ ๊ฒ์ ์๊ณ ์์ง๋ง ์ฌ๊ธฐ์ IIFE
์ ์ด๋ฆ๋ ์ง์ ํ ์ ์์ผ๋ฉฐ ์ต๋ช
์ IIFE
๊ฐ ๋ง์ผ๋ฉด ์ค๋ฅ๋ฅผ ์ถ์ ํ๊ธฐ๊ฐ ๋ ์ด๋ ค์ ๋๋ฒ๊น
์ ๋ ์ฝ๊ฒ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ ๋์ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ฃผ ๋ ์๋ ์์ต๋๋ค.
์๊ฐ?
๋๋ ์ด๊ฒ์ ๋ํด ๋ช ๊ฐ์ง ์๊ฐ์ ์ป๊ณ ์ถ์ต๋๋ค ... ์๋ง @dhcodes ๋๋ @Greenheart?
๋ด ๋ฌธ์ ๋ ๋์ ์ด ์์ด ์๋๋ฆฌ์ค์์ IIFE
์ด ํ๋นํ ์ง ์ค๋ช
ํ๋ ๋ฐ ์ ์ ํ์ง ์๋ค๊ณ ์๊ฐํ๋ค๋ ๊ฒ์
๋๋ค.
์๋ฃจ์ ์๋ ๋ค์์ด ํ์ํฉ๋๋ค.
let funModule = (function() {
return {
isCuteMixin: function(obj) {
obj.isCute = function() {
return true;
};
},
singMixin: function(obj) {
obj.sing = function() {
console.log("Singing to an awesome tune");
};
}
};
})();
๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค.
function Bird () { }
let duck = new Bird();
funModule.singMixin(duck);
duck.sing();
๊ทธ๋ฌ๋ IIFE
๋ฐํํ๋ ๊ฐ์ฒด๋ฅผ ์ ์ํ๊ธฐ ๋งํ๋ฉด ํจ์๋ฅผ ์ ํ ํธ์ถํ์ง ์๊ณ ๋ ์ฅํฉํ ๋ฐฉ์์ผ๋ก ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
๋์ ์ ๋ค์๊ณผ ๊ฐ์ด ๋งํฉ๋๋ค.
๋ชจ๋ ํจํด์ ์ฅ์ ์ ๋ชจ๋ ๋ชจ์ ๋์์ ๋จ์ผ ๊ฐ์ฒด๋ก ํจํค์ง ํ ๋ค์ ์ฝ๋์ ๋ค๋ฅธ ๋ถ๋ถ์์ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ ์ด๊ฒ์ IIFE๊ฐ ์ ํ ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์ ๊ฐ๋ ์ ๋์ ํ๊ฑฐ๋ ๋ ๊ฐ๋ ฅํ ๋ฐฉ๋ฒ์ ์ฐพ๋ ์์ด๋์ด์ ์๋ฌธ์ ์ ๊ธฐ ํ ๊ฒ์ ๋๋ค. ์บ ํ ์ฐธ๊ฐ์๊ฐ์ด๋ฅผ ์ํํด์ผํ๋ค๊ณ ์๊ฐํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ํผ๋ ์ค๋ฝ๊ฑฐ๋ ์คํด์ ์์ง๊ฐ์์ ์ ์์ต๋๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์ด ํจํด์ ๋ฌ์ฑํ์ญ์์ค.
์ด๊ฒฌ์๋ ์ฌ๋?
@ no-stack-dub-sack ์ด๊ฒ์ด IIFE์ ๊ฐ์ฅ ์ข์ ์๊ฐ ์๋๋ผ๋ ๋ฐ ๋์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด module
๋ฅผ ์ ๊ณตํ๋ฉด ๋ ์ข์๊น์?
IIFE์ ํต์ฌ ๊ฐ์น๋ ๊ฐ์ฒด์ ๊ฐ์ธ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ๋ง๋ค ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋น์ ์ ์ํํธ์จ์ด๋ฅผ ๋ ์์ ์ ์ผ๋ก ๋ง๋ค๊ธฐ๋ฅผ ๋ฐ๋ผ๋ฉด์ ๋น์ ์ ์ํํธ์จ์ด๋ฅผ ์๋ชป ์ฌ์ฉํ ์์๋ ๋ฐฉ๋ฒ์ ์ค์ด๋ ๋ฐ ์ ๋ง ์ ์ฉํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ๋๋จธ์ง๋ ๋ณ๊ฒฝ / ์ ๊ฑฐ ๋ ์์ ์ด๋ฉฐ ์ฝ๋๋ฒ ์ด์ค์ ๋ค๋ฅธ ๋ถ๋ถ์์ ์ฌ์ฉ๋๋ฉด ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ผ๋ฏ๋ก ๋ช ๊ฐ์ง ๊ณต์ฉ ๋ฉ์๋ ๋ง ๋ ธ์ถํ๋ ค๋ vanilla js ์ ํ๋ฆฌ์ผ์ด์ ์ฉ ์์ ์ ํธ๋ฆฌํฐ ๋ชจ๋์ด์์ ์ ์์ต๋๋ค.
์ด ์ฌ์ดํธ์๋ ์ข์ ์๊ฐ ๋ง์ด ์์ต๋๋ค : https://toddmotto.com/mastering-the-module-pattern/
@Greenheart ์ฌ๊ธฐ 2 ๊ฐ์ IIFE ์ฑ๋ฆฐ์ง ์ค ๋ง์ง๋ง ์ฑ๋ฆฐ์ง์์ ๋ชจ๋ ํจํด์ผ๋ก ์๊ฐ๋์์ผ๋ฉฐ ๋ฌธ์ ๋ ์์ต๋๋ค. _ ์ _ IIFE๋ฅผ ์ฌ์ฉํ๊ณ IIFE๋ฅผ ์ฌ์ฉํ๋์ง ๋ ๋ช ํํ๊ฒ ์ค๋ช ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋์ผํ ๊ธฐ๋ฅ์ ์ํํ๊ธฐ ์ํด ๋ฐ๋์ ์์ด์ผํ๋ ๊ฒ์ ์๋๋๋ค. ๋๋ ์ด๊ฒ์ด ๋ชจ๋ ๊ฒ์ ๋งํ๋ค๊ณ ์๊ฐํ๋ค.
IIFE์ ํต์ฌ ๊ฐ์น๋ ๊ฐ์ฒด์ ๊ฐ์ธ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ๋ง๋ค ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋น์ ์ ์ํํธ์จ์ด๋ฅผ ๋ ์์ ์ ์ผ๋ก ๋ง๋ค๊ธฐ๋ฅผ ๋ฐ๋ผ๋ฉด์ ๋น์ ์ ์ํํธ์จ์ด๋ฅผ ์๋ชป ์ฌ์ฉํ ์์๋ ๋ฐฉ๋ฒ์ ์ค์ด๋ ๋ฐ ์ ๋ง ์ ์ฉํฉ๋๋ค.
์ฐ๋ฆฌ๊ฐ ์ด๊ฒ์ ์ค๋ช ํ๊ณ ์ฌ์ฉ์์๊ฒ "IIFE์์ด ๋์ผํ ๊ธฐ๋ฅ์ ์ป์ ์ ์์ง๋ง IIFE๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๋์ ๋ฐฉ๋ฒ์ด๋ฉฐ, ์ฌ๊ธฐ์ ์ด์ ๊ฐ ์์ต๋๋ค."๋ผ๊ณ ์๋ฆฝ๋๋ค.
ํ์ฌ ์ง์นจ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ฆ์ ํธ์ถ ๋ ํจ์ ์ (IIFE)์ ๊ด๋ จ ๊ธฐ๋ฅ์ ๋จ์ผ ๊ฐ์ฒด ๋๋ ๋ชจ๋๋ก ๊ทธ๋ฃนํํ๋ ๋ฐ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
์ฌ๊ธฐ์ ๋ค์์ ์ถ๊ฐํด ๋ณด๊ฒ ์ต๋๋ค. "IIFE ์์ด๋ ๋์ผํ ๊ธฐ๋ฅ์ ๋ฌ์ฑ ํ ์ ์์ง๋ง,์ด ๋งฅ๋ฝ์์ IIFE์ ํต์ฌ ๊ฐ์น๋ ๊ฐ์ฒด์ ๋น๊ณต๊ฐ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์์ฑ ํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ ๋ค๋ฅธ ์ฌ๋๋ค์ด ๊ทํ์ ์ํํธ์จ์ด๋ฅผ (์ค์ฉ) ์ฌ์ฉํ์ฌ ํจ์ฌ ๋ ์์ ์ ์ผ๋ก ๋ง๋ค ์์๋ ๋ฐฉ๋ฒ. "
@ no-stack-dub-sack ์ด๊ฑฐ! : ํฌ์ธํธ _ ์ :
๋๋ ๊ทธ๊ฒ์ ์์ ๋กญ๊ฒ ์ปดํ์ผํ๊ณ ์ฝ๊ฐ์ ๋ณ๊ฒฝ์๊ฐํ์ต๋๋ค. ์ด์ ๊ฐ์ ๊ฒ์ด ์ฐ๋ฆฌ์๊ฒ ํ์ํ ๊ฒ์
๋๋ค.
An <dfn>immediately invoked function expression</dfn> (IIFE) is often used to group related functionality into a single object or module. While the same functionality can be achieved without an IIFE, its core value in this context is that you can create private properties and methods for your objects. This can be very useful for decreasing the ways others can (mis)use your software, and make things much more reliable.
ํด๋น ์ฉ์ด๊ฐ ์ด์ ๋์ ๊ณผ์ ์์ ์ฌ์ฉ๋์ง ์์ ๊ฒฝ์ฐ <dfn>
์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ณ์ํด์ ์ ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด์ ์์ฑ์ ์ก์ธ์คํ๊ธฐ ์ํ ํ ์คํธ๋ฅผ ์ ๋ฐ์ดํธํ๊ฒ ์ต๋๋ค!
https://github.com/freeCodeCamp/freeCodeCamp/issues/12966#issuecomment -275974706์ผ๋ก ๊ณ์ํฉ๋๋ค.
์ฒซ ๋ฒ์งธ ๋ฌธ์ ๋ linter๊ฐ ๋ณธ์ง์ ์ผ๋ก ์ฃฝ์ ์ฝ๋ ์ธ ํํ์์ ์์ฑํ๋ ๊ฒ์ ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค (ํจ์๋ฅผ ํธ์ถํ๊ฑฐ๋ ๋ณ์๋ฅผ ์์ฑํ์ง ์๊ธฐ ๋๋ฌธ์). ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฒฐ๊ณผ๋ฅผ ๋ณ์์ ํ ๋นํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ ๋ฒ์งธ ๋ฐ ์ธ ๋ฒ์งธ ๋ฌธ์ ๋ ์ ์ํ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋๋ก ์๋๋ฅผ ๋ณ๊ฒฝํ์ฌ ์์ ํ ์ ์์ต๋๋ค. ๋ณ์์ ํจ์ ๊ฐ์ฒด๋ฅผ ํ ๋นํ๋ ๊ฒ์ ๋ค๋ฅธ ๊ณณ์์ ๋๋ ๊ฒฝํ์ ํตํด ๋ฐฐ์ธ ์ ์์ต๋๋ค. function X () {}
์ ์ผ์นํด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋๋ ์ด๊ฒ์ ๊ณ ์น ๊ฒ์ด๋ค : ๋ฏธ์ :
https://github.com/freeCodeCamp/freeCodeCamp/issues/12966#issuecomment -276268534 ์์ : ๋ฏธ์ :
https://github.com/freeCodeCamp/freeCodeCamp/issues/12966#issuecomment -276565338 ์์
https://github.com/freeCodeCamp/freeCodeCamp/issues/12966#issuecomment -276245864 ์์ ํ๊ฒ ์ต๋๋ค.
๋๋ ๋์ ์ ํด๊ฒฐ์ฑ ์ด ์๋ค๋ ๊ฒ์ ์์ ๊ธฐ ๋๋ฌธ์ ํ์ฌ PR ์์ ์ค์ ๋๋ค.
์ด ํ
์คํธ๋ ํ์ฌ ๋ด์ฅ ๋ฉ์๋ Object.keys()
์ฌ์ฉ์ ํ์ฉํ์ง๋ง for...in
์ Object.hasOwnProperty()
๊ฒฐํฉํ์ฌ ์บ ํ ์ฐธ๊ฐ์๊ฐ ๋ ๋์ ์ฐ์ต์ ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ฐฉ๊ธ์ด ์ฑ๋ฆฐ์ง์ ๋์ผํ ๋ฌธ์ ๊ฐ ์์์ ๋ฐ๊ฒฌํ์ต๋๋ค. Object.keys()
์ด ํ์ฉ๋ฉ๋๋ค. ์ด๋ฌํ ์ฑ๋ฆฐ์ง์์ ์ด๊ฒ์ด ํ์ฉ๋์ด์ผํ๋ค๊ณ ์๊ฐํ์ง ์๊ธฐ ๋๋ฌธ์์ด ์ค ์์ ํ
์คํธ ์ผ์ด์ค๋ฅผ ์ถ๊ฐํ๋ PR์ ์์ฑํฉ๋๋ค.
function Dog(name) {
this.name = name;
}
Dog.prototype.numLegs = 4;
let beagle = new Dog("Snoopy");
let ownProps = Object.keys(beagle);
let prototypeProps = Object.keys(Dog.prototype);
์ด ๋ฌธ์ ๋ฅผ ๋ฐ๋ก ํด๊ฒฐํฉ๋๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ : ํ๋กํ ํ์ ์ ์ ๊ฐ์ฒด๋ก ๋ณ๊ฒฝ
๋ถ์ถฉ๋ถ ํ ์ง์นจ ๋ฐ ํ
์คํธ. describe
๋ฐ eat
๊ฐ prototype
์ ์์ด์ผํฉ๋๊น, ์๋๋ฉด ํจ์ ์ฌ์ผํฉ๋๊น?
๊ธฐ๋ฅ์ธ์ง ํ์ธํ๊ธฐ ์ํด ํ ์คํธ๋ฅผ ์ถ๊ฐํด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด ๋ฌธ์ ๋ ๊ฐ๋
์ฑ๊ณผ ์ผ๊ด์ฑ์ ๋์ด๊ธฐ ์ํด "์์ฑ์ ์์ฑ"ํ์์ <code>constructor</code> property
ํด์ผํฉ๋๋ค. ์ด๋ป๊ฒ ์๊ฐํด?
์๋ฅผ ๋ค์ด, ํ ์คํธ ๋ฉ์์ง๋์ด ํ์์ ์ฌ์ฉํฉ๋๋ค.
์ผ๋ฐ์ ์ธ ์ ์์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด let
๋ฌธ์ const
๋ก ๋ฐ๊พธ๋ ๊ฒ์
๋๋ค. @mpj ์์ด ๋น๋์ค ๋ ์ ์ค๋ช
ํฉ๋๋ค!
์ฌ์ํ ์คํ : supertype's
์ ์๋ง๋ supertype
์ผ ๊ฒ์
๋๋ค.
๋ง์ด๋ ์คํ "์ฌ๊ธฐ๋ฅผ ์ฌ์ฉํ ์์ด๋ค :"๋ก ๋ณ๊ฒฝํ๋ค "์ฌ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ์์ด๋ค :"
https://github.com/freeCodeCamp/freeCodeCamp/issues/12966#issuecomment -277447340์ ๋ํ PR ์์ ์ค์ ๋๋ค.
๋ ๋ค๋ฅธ ์ผ๋ฐ์ ์ธ ์ ์ : ์บ ํ ์ฐธ๊ฐ์๊ฐ ์ฑ๋ฆฐ์ง๋ฅผ ์๋ฃํ๊ธฐ ์ํด ์์ ๋ฅผ ๋ณต์ฌํ๊ณ 1-2 ๊ฐ์ง๋ฅผ ๋ณ๊ฒฝํ ์ ์๋๋ก ์์ ๋ฅผ ๋ณ๊ฒฝํด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์์ ๋ ๊ฐ๋ ์ ๋ณด์ฌ์ผํ์ง๋ง ์ฑ๋ฆฐ์ง itelf์์ ์ฌ์ฉํ๋ ์์ฑ์ด๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์๋ ์๋ฉ๋๋ค. ์ด๋ ๊ฒํ๋ฉด ์ฌ๋๋ค์ด ๊ฐ ๋์ ์์ ๋ ๋ง์ ๊ฒ์ ๋ฐฐ์ธ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
2017 ๋
2 ์ 4 ์ผ ํ ์์ผ ์คํ 9์ 11 ๋ถ, Samuel Plumppu [email protected]
์ผ๋ค :
๋ ๋ค๋ฅธ ์ผ๋ฐ์ ์ธ ์ ์ : ์์ ๋ฅผ ๋ณ๊ฒฝํด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์บ ํ ์ฐธ๊ฐ์๋ ์์ ๋ฅผ ๋ณต์ฌํ๊ณ 1-2 ๊ฐ์ง๋ฅผ ๋ณ๊ฒฝํ์ฌ ์๋ฃ ํ ์ ์์ต๋๋ค.
๋์ .์์ ๋ ๊ฐ๋ ์ ๋ณด์ฌ์ผํ์ง๋ง ์์ฑ์ด๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์๋ ์๋ฉ๋๋ค.
๋์ itelf์์ ์ฌ์ฉํฉ๋๋ค. ์ด๋ ๊ฒํ๋ฉด ์ฌ๋๋ค์ด
๊ฐ ๋์ ์์ ๋ ๋ง์.โ
์ด ์ค๋ ๋๋ฅผ ๊ตฌ๋ ํ๊ธฐ ๋๋ฌธ์์ด ๋ฉ์์ง๊ฐ ์ ์ก๋์์ต๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/freeCodeCamp/freeCodeCamp/issues/12966#issuecomment-277463832 ,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AX9USApjW3rwocbHWe2yoFLV0RegbkCCks5rZL9SgaJpZM4LxApU
.
@iansibindi ์ด ์ ์ฅ์์ ๋ชจ๋ ๋ฉ์์ง๋ฅผ ๊ตฌ๋ ํ์ ๊ฒ ๊ฐ์ต๋๋ค. ๋นํ์ฑํํ๋ ค๋ฉด https://github.com/freecodecamp/freecodecamp๋ฅผ ๋ฐฉ๋ฌธํ์ฌ ์ค๋ฅธ์ชฝ ์๋จ์ "Unwatch" ๋ฅผ ํด๋ฆญํ์ญ์์ค.
๋ถํธ์ ๋๋ ค ์ฃ์กํฉ๋๋ค!
@Greenheart ๋งํฌ๋ก๋ ์ด๋ค ๊ฐ๊ฐ์ ๋ฐ๋ผ๊ฐ๋ ๊ฒ์ด ์กฐ๊ธ ์ด๋ ต๋ค๋ ๊ฒ์
PR์ ์ด๊ธฐ ๊ฒํ ๋ฅผ ์์ํ๊ฒ ์ต๋๋ค.ํ์ง๋ง PR์ด ์ด๋ ค์๋ ๊ฒฝ์ฐ ์๋ณธ ๋๊ธ ๊ฐ๊ฐ์ ๋๊ธ์ ์ถ๊ฐํ์ฌ ํด๊ฒฐ ๋ ๋ฌธ์ ๋ฅผ ์ถ์ ํ ์ ์๋ค๊ณ ์๊ฐํ์ญ๋๊น?
@ no-stack-dub-sack Haha ๋๋ ์ง์ ๋ฐ๋ผ๊ฐ ์ ์๋ค๋ ๊ฒ์ ์ธ์ ํด์ผํฉ๋๋ค. :๋ฏธ์:
WIP / ๊ณ ์ ๋ ๊ฐ ์ฃผ์์ ์์ ๋ถ๋ถ์ ํฐ "PR open"(๋งํฌ ํฌํจ)์ ์ถ๊ฐํฉ๋๋ค.
@Greenheart ์๋ฒฝ! ๊ฐ์ฌ! ์ฒ์ ๋ช ๊ฐ์ PR์ ๊ฒํ ํ์ต๋๋ค.
https://github.com/freeCodeCamp/freeCodeCamp/issues/12966#issuecomment -277457211 ์์ ํ๊ฒ ์ต๋๋ค.
https://github.com/freeCodeCamp/freeCodeCamp/issues/12966#issuecomment -277459744 ์์ ํ๊ฒ ์ต๋๋ค.
https://github.com/freeCodeCamp/freeCodeCamp/issues/12966#issuecomment -277447340 ์์ ํ๊ฒ ์ต๋๋ค.
@ no-stack-dub-sack ์ข์ต๋๋ค. ์์ง ๋ช ๊ฐ์ง ํ ์ผ์ด ์์ง๋ง ์ค๋ ๋ช ๊ฐ์ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค!
์ฃ์กํฉ๋๋ค. ๋ค์ ๋ซ์์ต๋๋ค.
@Greenheart ์ฐ์! ํํด-์ด๊ฒ์์ ํ ์ผ์ด ๋จ์ ์์ต๋๊น? ๋ช ๊ฐ์ง ์ฃผ์ ๊ฐ์ ์ด ์ด๋ฃจ์ด์ก์ต๋๋ค!
@ no-stack-dub-sack ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์์ ์ค๋ช ์ ๋ฐ๋ผํด์ผ ํ ์ผ์ด ๋ช ๊ฐ์ง ์์ง๋ง ๋ค๋ฅธ ๊ณณ์์ ํด๊ฒฐ๋์์ ์๋ ์์ต๋๋ค.
์์ง ๊ณ ์ ๋์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ๋ค๋ฅด๊ฒ ์๊ฐํ๋ฉด ์๋ ค์ฃผ์ธ์
๋ชจ๋ ํ๋ฅญํฉ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ์ข ๊ฒฐํ๋ ์ค์ด๋ฉฐ ๋ ๊ตฌ์ฒด์ ์ธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ๋ค์ ์ด ์ ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์์์ ์ฌ์ฉํ์ฌ ์์ ์ ๋ฐ๋ณตํ์ง ๋ง์ญ์์ค .
์ด ๋์ ์ ์ฝ๊ฐ ํผ๋ ์ค๋ฝ์ต๋๋ค. ์ ๋ชฉ์ ์์์ ์๋ฏธํ์ง๋ง ์์์ ๋์ ์์ ์ธ๊ธ ๋ ์ ์ด ์์ต๋๋ค. ๋ค์ ๋์ ๊ณผ ๊ด๋ จ์ด ์๋ค๋ ๊ฒ์ ์๊ณ ์์ผ๋ฏ๋ก ์บ ํ ์ฐธ๊ฐ์๋ ๋นจ๋ฆฌ ์์๋ผ ์ ์์ง๋ง ์ ์๋ ๋ฐฉ์์ ์ฌ์ ํ โโ์ฝ๊ฐ ์๋ง์ ๋๋ค. ๋ํ ๋์ ์ด ๋๋ ๋
Animal
์ํผ ํ์ ์ ๋ง๋ค์์ง ๋ง์ด ์์ ์์Animal
๋Cat
์ฐ๊ฒฐ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ฝ๊ฐ ํผ๋์ค๋ฌ์์ง๋๋คDog
. ํผ๋์ ์ํํ๊ธฐ ์ํด ์ฝ๊ฐ์ ๋ณ๊ฒฝ์ด ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.์ด ๋ฌธ๊ตฌ๋ ๋ค์ ๋์ ์์ ๋์์ต๋๋ค.
์๋ง๋ ์ฌ๋ฌผ์ ์ฐ๊ฒฐํ๊ธฐ ์ํด ์ด์ ์ ์ฌํ ๋ ๋์ ์์ค์ ๊ฐ์๊ฐ ๋์ 3 ๊ฐ๋ฅผ ๋ชจ๋ ์ฐ๊ฒฐํ๋์ด ์ฑ๋ฆฐ์ง์์ ์ฃผ์ด์ง ์ ์์ผ๋ฏ๋ก ๊ทธ๊ฒ๋ค์ด ์ํ์ค๋ผ๋ ๊ฒ์ ์ดํดํ๊ณ ์ค์ ๋ก ์ฑ๋ฆฐ์ง์ ์ ๋ชฉ์ด ๋ถ์ ๊ฐ๋ ์ ์๊ฐํ๊ณ ๊ทธ๊ฒ์ ๋ง๋ญ๋๋ค ์ด ๋์ ์ ๋์์ ์ฐ๋ฆฌ๋ ์์ง ๋๋์ง ์์๋ค๋ ๊ฒ์ ๋ถ๋ช ํํฉ๋๋ค.