본문 바로가기
학습 log (이론)/javascript

'함수호출과 this #1' 함수와 프로토타입 체이닝

by abbear25 2016. 10. 16.

argument 객체

매개변수(인자) 개수가 정확하게 정해지지 않은 경우에 사용

전달된 인자의 개수에 따라 서로 다른 처리를 해줘야 하는 경우에 사용 

function func(){

var result;

for(var i = 0; i < argument.length; i++){

result += arguments[i];

}

return result;

}

func(1, 3, 5);; //결과 : 9

func(1, 3);; //결과 : 4

func(); //결과 : undefined


*자바스크립트는 함수에서 선언한 인자 수에 상관없이 호출가능

function func(x, y){

return x+y;

}

func(1, 3, 5); //결과 : 4

func(1, 3); //결과 : 4

func(); //결과 : undefined


arguments 객체와 같은 유사 배열 객체에서는 pop(), shift()같은 

표준 배열 메서드 사용 불가

apply()를 사용하여 구현

function myFunc(){

console.dir(arguments);

/*배열 메서드가 있는 것처럼 처리

다음 메서드를 자신의 메서드인 것처럼 호출*/

var args = Array.prototype.slice.apply(arguments);

console.dir(args);

}

myFunc(1, 2, 3);

*Array.prototype

모든 배열 객체의 부모 역할을 하는 기본 프로토타입 객체

slice(), push(), pop()와 같은 배열 표준 메서드를 제공

*slice(start, end)

start ~ end-1 index까지 복사한 배열 리턴

slice() 배열 전체 

slice(start) 'end default' = 배열의 length


객체의 메서드 호출할 때 this바인딩

해당 메서드를 호출한 객체로 바인딩 됨

즉, 자신의 내부 함수에 선언은 했지만

다른 객체에 선언되면 다른 객체의 this가 됨

var initObject = {

name : 'first',

call : function(){

console.log('name : '+this.name);

}

};


var nextObject = {

name : 'second'

};

nextObject.call = initObject.call;

initObject.call(); //결과 : first

nextObject.call(); //결과 : second

반응형