bind() bind()๋ this ๊ฐ์ ๊ณ ์ ์ํค๋ ๋ช
๋ น! bind() ์์ ์ฒซ๋ฒ์งธ ์ธ์๋ this ๋ฅผ ๊ณ ์ ์ํค๊ณ , ๋๋ฒ์งธ ์ธ์๋ถํฐ๋ ํจ์๊ฐ ํธ์ถ๋ ๋๋ง๋ค ์ฌ์ฉ๋๋ค. sum์ด๋ผ๋ ํจ์์ this๋ฅผ kim ์ผ๋ก ๊ณ ์ ํ๋ ์๋ก์ด ํจ์(KimSum)๊ฐ ๋ง๋ค์ด์ง // object ์ function ์ฌ์ด์ ๊ด๊ณ๋ฅผ ๊ท๋ช
ํด๋ณด๊ธฐ 2 let kim = {name:'kim', first:10, second:20} let lee = {name:'lee', first:10, second:10} function sum(prefix){ return prefix +(this.first + this.second); } console.log('sum.call(kim)', sum.call(kim, '=>')); console.log('..
์ํ์ฝ๋ฉ๊ฐ์ฒด์งํฅ
call()์ ์คํํ ๋๋ง๋ค ์ด๋ค ๊ฐ์ฒด์ this ๊ฐ์ ๋ฐ๊พธ๋ ๋ช
๋ น! call()์ ์ฒซ๋ฒ์งธ ์ธ์๋ก๋ ๊ทธ ํจ์์ ๋ด๋ถ์ ์ผ๋ก this๋ฅผ ๋ญ๋ก ํ ์ง ์ค๊ณ , ๋๋ฒ์งธ ์ธ์๋ถํฐ๋ ํธ์ถํ๋ ค๋ ํจ์์ ์ธ์๊ฐ(parameter)์ด ๋ค์ด์ค๊ฒ ๋๋ค // object ์ function ์ฌ์ด์ ๊ด๊ณ๋ฅผ ๊ท๋ช
ํด๋ณด๊ธฐ 1 //์๋ก ์๋ฌด๋ฐ ๊ด๋ จ์ด ์๋ ๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์์ด์. let kim = {name:'kim', first:10, second:20} let lee = {name:'lee', first:10, second:10} function sum(prefix){ return prefix +(this.first + this.second); // ์ด๋ค ๊ฐ์ฒด์๋ ์ํด์์ง ์์ ํจ์ } //sum ์ด๋ผ๋ ๊ฐ์ฒด๋ฅผ ์คํ์ํค๊ฒ ๋ค! consol..
์๋ฐ์คํฌ๋ฆฝํธ์ ๊ต์ฅํ ์ ์ฐํ ํน์ง! ๋ง์๋๋ก ๋๊ตฐ๊ฐ์ ์์์ด ๋ ์ ์๋ค~~ ๋จ, ์์์ ๋ถ๋ชจ๋ฅผ ๋ชป๋ฐ๊พผ๋ค let superObj = {superVal:'super'} let subObj = {subVal:'sub'} // ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ต์ฅํ ์ ์ฐํ ํน์ง! // ๋ง์๋๋ก ๋๊ตฐ๊ฐ์ ์์์ด ๋ ์ ์๋ค subObj.__proto__ = superObj; // '__proto__'๋ผ๋ ๋งํฌ๋ฅผ ๊ฑธ์ด์ค: subObj๋ ์ ์กฐ๋ superObj์ด๋ค console.log('subObj.subVal =>',subObj.subVal); console.log('subObj.superVal =>',subObj.superVal);// ๊ฐ์ฒด subObj๊ฐ superVal์ด๋ผ๋ ์์ฑ์ ๊ฐ์ง๋ ์ง ์ฐพ์๋ด. ์๋ค, ๊ทธ๋ฌ๋ฉด '__pro..
Object.create() __proto__ ๋์ ์ 'Object.create()' ๋ฅผ ์ฌ์ฉํด์ prototype link(๋ช
ํํ ์์๊ด๊ณ)๋ฅผ ์ง์ ํด์ค ์ ์๋ค. let lee = Object.create(kim); kim์ ๋ถ๋ชจ๋ก ํ๋ ์์๊ฐ์ฒด lee๋ฅผ ๋ง๋ค์ด์ค let superObj = {superVal:'super'} //let subObj = {subVal:'sub'} //subObj.__proto__ = superObj; let subObj = Object.create(superObj);// superObj๋ฅผ ๋ถ๋ชจ๋ก ํ๋ ์๋ก์ด ๊ฐ์ฒด,๋ณด๋ค prototype link(๋ช
ํํ ์์๊ด๊ณ)๋ฅผ ํ๋ฆฝ! subObj.subVal = 'sub'; //์ฃผ์์ฒ๋ฆฌ๋ฅผ ํ ์์ ์ฝ๋์ ๋๊ฐ์ด ๋์ console.lo..
'__proto__' lee.__proto__ = kim; lee๋ kim์ ์์์ด๋ค // class ๋ฌธ๋ฒ์ด ์๋๋ผ ์์ฃผ ๊ด์ต์ (prototype)์ผ๋ก ์์ํ๋ ๋ฐฉ๋ฒ let superObj = {superVal:'super'} let subObj = {subVal:'sub'} // ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ต์ฅํ ์ ์ฐํ ํน์ง! // ๋ง์๋๋ก ๋๊ตฐ๊ฐ์ ์์์ด ๋ ์ ์๋ค subObj.__proto__ = superObj; // '__proto__'๋ผ๋ ๋งํฌ๋ฅผ ๊ฑธ์ด์ค: subObj๋ ์ ์กฐ๋ superObj์ด๋ค console.log('subObj.subVal =>',subObj.subVal); console.log('subObj.superVal =>',subObj.superVal);// ๊ฐ์ฒด subObj๊ฐ superVa..
super ํค์๋ super() ํค์๋๋ ์์(๋ถ๋ชจ)๊ฐ์ฒด์ ํจ์๋ฅผ ํธ์ถํ ๋ ์ฌ์ฉ๋ฉ๋๋ค ๋จ, constructor(์์ฑ์) ์์์๋ super ํค์๋ ํ๋๋ง ์ฌ์ฉ๋๊ฑฐ๋ this ํค์๋ ์ ์ ๋จผ์ ํธ์ถ๋์ด์ผ ํฉ๋๋ค ๋ถ๋ชจ ํด๋์ค์ ์์ญ์, ์์ํด๋์ค(๋)๋ ํฌํจํ๊ณ ์๋ ๊ฒฝ์ฐ! ์ค๋ณต์ ์ค์ด๋ ค๊ณ ๊ทธ๋, ์ฌ์ฉํ๋ ํค์๋ 'super' super ํํ 2๊ฐ์ง 1.super() = ๋ถ๋ชจ ํด๋์ค์ ์์ฑ์(constructor) 2.super. = ๋ถ๋ชจํด๋์ค์ class Person { constructor(name, first, second){ this.name =name; this.first=first; this.second=second; } sum(){ return this.first+this.second; } ..
Class inheritance ์์์ ์ฐ๋ ์ด์ : ์ค๋ณต์ฝ๋๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํจ. ์ฆ, ๋ถ๋ชจํด๋์ค๋ฅผ ์ผ์ผ์ด ์ฐ์ง์๊ณ , ๋ฐ๋ ค์ ์๋ก์ด ๊ธฐ๋ฅ์ ์์ class์ ์ถ๊ฐํด ์ฃผ๊ณ ์ถ์๋ ํํ : ์์ํด๋์ค์ธ PersonPlus ๋ ๋ถ๋ชจํด๋์ค์ธ Person์ ์์ฑ์ ๊ฐ์ง๊ณ ์์ ๊ณต์ ํ๋ค ๋ฐ๋ผ์, ๋ถ๋ชจํด๋์ค Person์ ์์ฑ์ ์์ ํ๋ค๋ฉด, ์์ํด๋์ค PersonPlus ์์ฑ๋ ์์ ๋จ //๋ถ๋ชจํด๋์ค class Person { constructor(name, first, second){ this.name =name; this.first=first; this.second=second; } sum=()=>{ return (this.first+this.second); } } //์์ํด๋์ค class PersonPlus exte..