📕 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