객체에 메소드를 부여하는 방법중 하나는 다음 코드처럼 함수 값을 객체에 첨가하는것이다
var rabbit = {}; // rabbit객체 생성 //speak메소드 부여 rabbit.speak = function(line) { console.log("토끼가말합니다: '", line, "'"); } rabbit.speak("저는 살아 있어요."); // 토끼가말합니다 : ' 저는 살아 있어요. '
this
그런데 토끼 여러마리여서 서로 다른 말을 해야할때 객체안에 메소드인(rabbit.speak();) speak() 안에 this는 해당 객체를 가르킨다.
function speak(line) { console.log(this.adjective, "토끼가 말합니다:'",line,"'"); } var whiteRabbit = {adjective: "흰색", speak: speak}; var fatRabbit = {adjective: "살찐", speak: speak}; whiteRabbit.speak("하얀토끼가 좋으세요?"); // 흰색 토끼가 말합니다:' 하얀토끼가 좋으세요? ' fatRabbit.speak("당근먹고싶다"); //살찐 토끼가 말합니다:' 당근먹고싶다 '
call(), apply()
이번엔 반대로 call 과 apply을 이용해 함수에서 객체를 불러보자.
speak.call(fatRabbit,"꺼억~"); //살찐 토끼가 말합니다:' 꺼억~ ' speak.apply(fatRabbit,["냠냠"]); // 배열타입으로 인자를 넘김 //살찐 토끼가 말합니다:' 냠냠 '
주의할 점은 apply는 배열 ([]) 타입으로 인자를 넘겨야한다는 것이다. 기능은 같다.
function run(from, to) { console.log(this.adjective + "토끼가" , from + "에서" , to + "로 달려갑니다."); } var ary =["찬장","냉장고","집","학교"]; run.apply(fatRabbit, ary); //살찐 토끼가 찬장에서 냉장고로 달려갑니다. run.call(whiteRabbit, ary[2],ary[3]); //흰색 토끼가 집에서 학교로 달려갑니다.
Total Views: 457 ,