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
'학습 log (이론) > javascript' 카테고리의 다른 글
'call(), apply()' 함수와 프로토타입 체이닝 (0) | 2016.10.17 |
---|---|
'생성자 함수를 이용한 객체 생성과 this #2' 함수와 프로토타입 체이닝 (0) | 2016.10.17 |
'함수의 다양한 형태' 함수와 프로토타입 체이닝 (0) | 2016.10.16 |
'함수 객체의 기본 프로퍼티' 함수와 프로토타입 체이닝 (0) | 2016.10.15 |
'함수도 객체다' 함수와 프로토타입 체이닝 (0) | 2016.10.14 |