📕 Language/JavaScript
[Javascript] instanceof, arguments
a n u e
2022. 4. 29. 11:41
function a()
{
if(!(this instanceof arguments.callee))
{
return new a();
}
}
1. function
function도 하나의 객체이다.
2. this, new
this는 함수의 호출자를 가리킨다.
즉시실행함수처럼 앞에 호출자가 없다면, 기본적으로 window 객체를 가리킨다.
함수 선언 시, 앞에 new가 붙고 안붙고는 완전 다른 결과를 부른다.
a(); //a 함수 속 this는 window 객체를 가리킨다.
var func = a(); //a 함수 속 this는 window 객체를 가리킨다. (참고 func; 를 하면, a()가 실행된다.)
new a(); //a 함수 속 this는 새로 생성된 객체를 가리킨다.
var func = new a(); //a 함수 속 this는 새로 생성된 객체를 가리킨다. (참고 func; 를 하면, 새로 생성된 객체를 가리킨다.)
//this를 변경하고 싶다면? call / apply 함수를 사용
3. A instacneof B
앞 뒤로, 인자를 받아서 비교하여 boolean값 반환
Q. A가 B의 자식인가?
Q. A는 B의 prototype chain 하위인가?
var Person = function()
{
this.name = "kimeuna"
this.age = "29"
};
var Kimeuna = new Person();
Kimeuna instacneof Person; //true
Kimeuns instacneof Object; //true
[1, 2] instanceof Array ; //true
{ a: "aa" } instanceof Object ; //true
true instanceof Boolean ; //false
"A" instanceof String ; //false
var str = new String("def");
var str2 = "abc";
str instanceof String; //true
str2 instanceof String; //false
4. arguments
arguments는 function 객체의 고유 프로퍼티
function myfunc(a,b,c)
{
console.log(arguments[0]);
return arguments;
}
myfunc(1,2,3) //1
/**
Arguments
0 : 1
1 : 2
2 : 3
* callee? 함수 자기 자신을 반환해주는 항목
*/
5. 해석
if(!(this instanceof arguments.callee))
- a라는 function의 호출자(this)가 이 함수(arguments.callee)에 자식인지, prototype chain에 속해있지 않은지 판별
return new a();
- 속해있지 않다면, new a()를 return해준다.
출처
https://gogoonbuntu.tistory.com/46