반응형

# 자바스크립트 학습

# 프로퍼티 처리 메소드

## hasOwnProperty()

구분 데이터(값)
object 기준 인스턴스
파라미터 프로퍼티 이름
반환 true, false
  • 인스턴스에 파라미터 이름이 존재하면 true 반환, 존재하지 않으면 false를 반환한다.
var obj = {value: 123};
var own = obj.hasOwnProperty("value");
log(own);

=>
true

 

var obj = {value: undefined};
var own = obj.hasOwnProperty("value");
log(own);

=>
true

undefined가 값이지만 false로 인식된다.
하지만 값은 체크하지 않고 존재여부만 체크하므로 true 반환
  • 자신이 만든것이 아닌 상속받은 프로퍼티(다른 오브젝트에서 만든 프로퍼티)이면 false를 반환한다.
var obj = {};
var own = obj.hasOwnProperty("hasOwnProperty");
log(own);

=>
false

hasOwnProperty()는 자신이 만든 것이 아닌 빌트인 Object 오브젝트에 있는 것

## propertyIsEnumerable()

구분 데이터(값)
object 인스턴스, 오브젝트
파라미터 프로퍼티 이름
반환 true, false
  • 오브젝트에서 프로퍼티를 열거할 수 있으면 true 반환, 없으면 false를 반환한다.
1. 열거 가능
var obj = {sports: "축구"};
log(obj.propertyIsEnumerable("sports"));

=>
true


2. 열거 불 가능
var obj = {sports: "축구"};
Object.defineProperty(obj, "sports", {
	enumberable: false	// 열거 불가능 설정
});
log(obj.propertyIsEnumberable("sports"));

for(var name in obj) {
	log(name)
}

=>
false

 

# Object와 prototype

## 빌트인 Object의 특징

  • 인스턴스를 만들 수 있는 모든 빌트인 오브젝트의 __proto__에 Object.prototype의 6개 메소드가 설정된다. 빌트인 오브젝트로 만든 모든 인스턴스에도 위 6개 메소드가 존재한다.

## isPrototypeOf()

구분 데이터(값)
object 검색할 오브젝트.prototype
파라미터 검색 대상 오브젝트
반환 true, false
  • 파라미터에 작성한 오브젝트에 object 위치에 작성한 prototype이 존재하면 true, 존재하지 않으면 false를 반환한다.
var numObj = new Number(123);
log(Object.prototype.isPrototypeOf(numObj));

=>
true

## toString()

구분 데이터(값)
object Object 인스턴스
파라미터 사용 불가
반환 변환한 값
  • 인스턴스 타입을 문자열로 표시한다.
var point = {book: "책"};
log(point.toString());

var obj = new Number(123);
log(Object.prototype.toString.call(obj));

=>
[object Object]
[object Number]
  • 오브젝트에 toString()이 있으면 toString()이 호출되고, 없으면 Object의 toString()이 호출된다.

## toLocaleString()

구분 데이터(값)
data 변환 대상
파라미터 사용 하지 않음
반환 변환한 값
  • 지역화 문자 변환 메소드를 대체하여 호출한다.
  • Array, Number, Date 오브젝트의 toLocaleString() 메소드가 먼저 호출된다.
log(1234.56.toLocaleString());
log("4567.89".toLocaleString());

=>
1,234,56
4567.89

String.prototype.toLocaleString()이 없으므로 Object.prototype.toLocaleString() 메소드가 호출된다.

 

# Function 오브젝트

## 빌트인 Function 오브젝트의 프로퍼티 리스트

이름 개요
Function
new Function() 인스턴스 생성
Function() 인스턴스 생성
Function 프로퍼티
length 함수의 파라미터 수
Function.prototype
constructor 생성자
call() 함수 호출
apply() 함수 호출: 배열을 파라미터로 사용
toString() 함수를 문자열로 반환
bind() 새로운 오브젝트를 생성하고 함수 실행

## new Function()

구분 데이터(값)
파라미터 파라미터opt
실행 가능한 JS 코드opt
반환 생성한 Function 인스턴스
  • Function 인스턴스를 생성한다.
  • 파라미터에 문자열로 함수의 파라미터와 함수 코드를 작성한다.
var obj = new Function("book", "return book;");
obj("JS 책");
  • 파라미터 수에 따라 인스턴스 생성 기준이 다르다.
  • 파라미터를 2개 이상 작성한 경우
마지막 파라미터에 함수에서 실행할 함수 코드를 작성한다.
이를 제외한 나머지 파라미터는 함수의 파라미터가 된다.

var obj = new Function("one", "two", "return one + two");
log(obj(100, 200));

=>
300
  • 파라미터를 하나만 작성한 경우
함수에서 실행할 함수 코드를 작성한다.
즉, 파라미터가 없는 것

var obj = new Function("return 1 + 2;");
log(obj());

=>
3
  • 파라미터를 작성하지 않으면, 함수 코드가 없는 Function 인스턴스를 생성한다.

## Function()

구분 데이터(값)
파라미터 파라미터opt
실행 가능한 JS 코드opt
반환 생성한 Function 인스턴스
  • Function 인스턴스를 생성한다.
  • 처리 방법과 파라미터 작성이 new Function()과 같다.
  • 단지 new 연산자를 사용하지 않은 것이다.

# 함수 생명 주기

## 함수의 분류

  • function 분류
빌트인 Function 오브젝트

function 오브젝트

function 인스턴스(new 연산자 사용)
  • function 오브젝트 생성 방법
function 키워드 사용하여 아래와 같이 함수 정의
	function getbook(title) {return title};

그러면 자바스크립트 엔진이 function 키워드를 만나면 
이름이 getBook인 function 오브젝트를 생성한다.

## 함수의 생명 주기

  • 함수 호출
function getBook(title) {
	return title;
};

var result = getBook("JS북");
log(result);

=>
JS북

getBook("JS"); 함수를 호출하면서 파라미터 값을 넘겨 준다.
이때 함수 코드가 실행,
자바스크립트의 엔진 컨트롤이 함수의 처음으로 이동한다.
파라미터 이름에 넘겨 받은 파라미터 값을 매핑
함수 코드 실행
return 작성에 관계없이 반환 값을 갖고 함수를 호출한 곳으로 돌아간다.
  • 이러한 일련의 과정을 함수 생명 주기라고 한다.

## length 프로퍼티

  • 함수의 파라미터 수가 생성되는 function 오브젝트에 설정된다.
function add(one, two) {
	return one + two;
};
log(add.length);

=>
2
  • 함수를 호출한 곳에서 보낸 파라미터 수가 아니다.
function add(one, two) {
	return one + two;
};

add(1, 2, 3, 4);
log(add.length);

=>
2

one에 1이 설정, two에 2가 설정된다.
  • 자바스크립트의 경우 호출하는 함수의 파라미터 수, 호출 받는 함수의 파라미터 수가 같지 않아도 된다. 또한, 파라미터 값의 타입이 같지 않아도 된다.
반응형

+ Recent posts