function aaa() {
ย ย this.text = "aa";
ย ย this.objects = [];
}
aaa.prototype.addObj = function(obj) {
ย ย this.objects.push(obj);
}
aaa.prototype.remObj = function() {
ย ย this.objects.pop();
}
aaa.prototype.__defineGetter__("text", function() {
ย ย return this.objects[this.objects.length-1].text;
})
function bbb() {
ย ย this.text = "bb";
}
var a = new aaa();
var b = new bbb();
a.addObj(a);
a.addObj(b);
console.log(a.text)
ํ๋ฉด bb๊ฐ ๋์ค๊ธด ํจ. ๊ทธ๋ฌ๋๊น objects ๋ผ๋ ๋ฐฐ์ด์ ๋ง๋ค๊ณ ๊ฑฐ๊ธฐ์ ๋ณธ์ธ์ด๋ ์๋ก์ด ๋์ ์ถ๊ฐํ๊ณ , ๋ณธ์ธ์ ๋ฉค๋ฒ๋ฅผ ํธ์ถํ ๋ ๋ง์ง๋ง์ ์ถ๊ฐ๋ ๊ฐ์ฒด์ ์๋๊ฑธ ํธ์ถํ๋๋ก ๊ฒํฐ๋ฅผ ์ง์ ํ๋ ๋ฐฉ์์ผ๋ก ๊ฐ์ฒด a๊ฐ ๊ฐ์ฒด b๋ก ๋ฐ๋๊ฒ ํ๋๋ฐ
๋ฒ๋ฒํ ๊ฒํฐ ์ง์ ํ๊ธฐ๊ฐ ๊ท์ฐฎ๊ณ ์ด๊ฑฐ ์ ํฐ๋ ์ง์ ํด์ผ๋์ -_- ๋๋ฌด ๊ท์ฐฎ์... b์์ ๋ค์ a๋ก ๋์๊ฐ ์ ์์ด์ผํ๊ธฐ ๋๋ฌธ์ a์ ์ ๋ณด๋ ์ ์งํ๊ณ ์์ด์ผํจ.
๊ฐ์ฒด a์ ๊ฐ์ฒด b๊ฐ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง๊ธด ํ์ง๋ง ๋ด๋ถ์ ์ผ๋ก ๋์์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฅ ๊ฐ ๋ณต์ฌ ํ๋ ์์ผ๋ก ํ๊ณ ์ถ์ง ์์.
๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์์๊น์ฌ?
์ ์คํ ์ดํธ ํจํด์ด ์์๊ทผ์ฌ
๋ ์ด๊ฑฐ ์ธ์ด๊ฐ ๋ญ์ฃ ์๋ฐ์คํฌ๋ฆฝํธ?
๋ค ์๋ฐ์คํฌ๋ฆฝํธ์
์ ๋ผ๋ฉด aaa.prototype.getLastObj = function() { return this.objects[this.objects.length-1]; } ๋ผ๋ ๋ฉ์๋ ๋ง๋ค์ด์ฃผ๊ณ ์ธ๋ ๊ทธ๋ฅ a.getLastObj().text ์ด๋ ๊ฒ ์ธ๊ฒ ๊ฐ์๋ฐ.. ์ด๊ฒ ๋์ด ํ์ค๋ ค๋๊ฑฐ๋ ๋ง๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ ์๋ฐ์คํฌ๋ฆฝํธ๋์ ๋ชจ๋ฅด๊ณ ์ํผ ๊ทธ๋ฅ ์๊ฐ๋ ๊ฑฐ ์จ๋ดค๋ค์ ์๋๋ฉด ๋์ด๊ฐ์ฃผ์๊ธธ ใ
์ ๊ทธ๊ฑฐ ์๊ฐํ๊ธด ํ๋๋ฐ, ๊ฝค ๋ง์ ์์ ๋ฉค๋ฒ๊ฐ ํด๋น๋์ด์ ๋ฒ๋ฒํ ๊ทธ๋ ๊ฒ ์ฐ๊ธฐ๊ฐ ์ข ๋ถํธํ ๊ฑฐ ๊ฐ๋๋ผ๊ตฌ์.... ๋ ์ด์งํผ a.state.text ํ๋ฉด ๋๊ฐ์...?
๋ณ์์ ํน์ ํจ์ ๋์ ๊ฐ๋ฅํ์ง์์? ๊ธธ๊ฒ์ฐ๊ธฐ ์ซ์ผ๋ฉด ๋ณ์์ ๋ด์ ์ฐ์ . ๊ธ๊ณ ๋ฒ๋ฒํ ๊ฒํฐ ์ง์ ํ๋ค๋๊ฒ ๋จผ์๋ฆฐ์ง ๋ชจ๋ฅด๊ฒ ๋๋ฐ aaa๋ก ๊ฒํฐ ์ง์ ํ์ผ๋ฉด ์์ํ๋ฉด ๋๋๊ฑฐ์๋? ์๋๋ฉด ํจ์ ํ๋๋ง๋ค๊ณ .call() ๊ฐ์๊ฑฐ ์จ์ ๊ทธ ๊ฐ์ฒด์ ํจ์ ํธ์ถ ์ฒ๋ผ ์ฐ๋ฉด ๋์ง์์?
ใ ใ // ์, text, sound, move ๋ฑ๋ฑ ๋ฉค๋ฒ๊ฐ ์ฌ๋ฌ๊ฐ ์์ด์ ๊ทธ ์ซ์๋งํผ ๊ฒํฐ ์จ์ฃผ๊ธฐ๊ฐ ์ซ์๋ค๋ ์๊ธฐ์๋๋ฐ ๊ทธ๋ฐ๊ฑด ์๋๊ฐ์?
text, sound, move ๋ฑ ์ฌ๋ฌ๊ฐ๊ฐ ์์ด๋ ์ธํฐํ์ด์ค ๋์ผํ๋ฐ ๊ตณ์ด ๊ฒํฐ๋ฅผ ๋ค ๋ง๋ค์ด์ค์ผํ ์ด์ ๊ฐ ์๋์? ๊ทธ๋ฅ ํธ์ถํ๋ฉด ํธ์ถ๋ ํ ๋ฐ.. (์๋๊ฐ..
ํ? ์ ๊ทธ๋ ์ฃ ใ ใ ๊ฒํฐ๊ฐ ๋ณ์ํ๋ง๋ฆฌ์ ํ๋์ฉ ๋ถ๋๊ฑฐ ์๋๊ฐ์ฌ?
๊ฒํฐ๋ฅผ ์ฐ๋ ์ด์ ๊ฐ get ํ ๋ ๊ฐ์ฒด๋ง๋ค ๋ค๋ฅธ ๋์์ ์ฝ์ ํ๊ณ ์ถ์๊ฑฐ๋ฉด ๋ชฐ๋ผ๋, ๊ทธ๋ฅ get ๊ธฐ๋ฅ์ ์ด๋ค ๊ฐ์ฒด์ ์ฐ๊ฒฐ์ํค๋๋์ ๊ดํ ๊ฑฐ๋ผ๋ฉด ์ธ ์ด์ ๊ฐ ์์ด์. ๊ทธ๋ฅ xxx.text ์ฌ์ฉํ์๋ฉด ๋ผ์ xxx๋ .text ๋ฉค๋ฒ๋ฅผ ๊ฐ์ง ๊ฐ์ฒด์ ๋ณ์๋ผ๋ฉด ์๋ฌด๊ฑฐ๋ ๊ฐ๋ฅํ๊ณ ์. (ํน์ ์ด์๊ธฐ ์๋๋ฉด ใ ใ )
์๊น ๋ง์ํ์ ๊ฑฐ์ฒ๋ผ state๋ฅผ ์ฐ์๋ ํน์ getLastObj๋ฅผ ์ฐ๋์ง ํด์ ๋ณ์ ๋ ๊ฐ์ฒด๋ง ์ป์ด๋ผ์ ์์ผ๋ฉด ์ธํฐํ์ด์ค๋ ๋์ผํ๋๊น ๊ฒํฐ ์์ด ๊ทธ๋ฅ ์ป์ด๋ธ ๊ฐ์ฒด์ ๋ฐ๋ก .text .sound ์ฌ์ฉํ ์ ์์ ๊ฒ ๊ฐ๋จ ์๊ธฐ์์ด์
์ํ! ๊ทธ ๋ง์ด์ จ๊ตฐ์