함수와 객체에 대해 배운 날! 공부할 양이 너무 많아서 힘들었다. 함수.. 이렇게 어려웠구나..하고 넘어가는데 객체, 배열 자료가 너무 많아서 읽다가 지쳤다. 구조 분해 할당이 나올땐 내가 뭘 읽고 있는거지..하는 생각이 들었다. 주말동안 복습할 시간이 많아서 정말 다행이다. 진짜 여러번 읽고 안 읽히면 기계적으로 읽어보고 해야겠다.
팀원 분 중 한 분이 일정이 있으셔서 나머지 한분과 mission을 나눠서 했다. 함수와 객체에 대한 질문 이었는데, 처음 질문만 봤을땐 굉장히 어려워보였는데 팀원분이 설명을 너무 잘 써놓으셔서 쉽게 이해가 됐다!
메뉴판이 있으면 키(메뉴 이름)를 해쉬함수를 통해 숫자로 바꿔주고
그 숫자가 인덱스(번호)가 되고 거기에 밸류(가격)가 저장되는 구조를 말한다.
서랍장을 객체로 서랍 안에 파일을 프로퍼티로 파일에 붙여있는 이름표를
키(key)로 안에 있는 내용을 값(value)이라고 생각하면 된다.
즉 여러 속성을 하나의 변수에 저장 할 수 있도록 해주고
키(이름표)를 보고 프로퍼티(파일)를 찾을 수 있게 해준다.
서랍장 안에 이름표가 붙어 있는 파일이라고 생각하면 된다
객체(서랍장) 안에 선언된 key(이름표)와 value(내용)으로 이루어진
한 쌍(파일)을 말한다.
프로퍼티는 프로퍼티 키로 유일하게 식별할 수 있다.
즉, 프로퍼티 키는 프로퍼티를 식별하기 위한 식별자이다.
해시는 자료를 저장하는 데이터 기법이고
즉 해시함수라는 것을 통해 저장하는 방식이고 객체는 키와 값으로 된
프로퍼티를 저장한 것이다 해시함수를 쓰는 것이 아니라 단순하게 저장된 방식
- 호출방식에 따라 다르다, 함수를 호출하는 객체가 있는 경우 메서드,
호출하는 객체가 없는 경우 함수
- 함수는 객체로 부터 독립적이며, 메서드는 객체에 종속적이다.
- ‘객체’로부터 독립적인가 아닌가가 함수와 메서드를 나누는 기준이다.
let obj ={
test: function(){
console.log('test() 메서드 호출');
}
}
function test2(){
console.log('test2() 함수 호출');
}
obj.test(); //메서드
test2(); //함수
아래의 세 조건을 만족하면 일급객체로 간주한다.
1. 변수에 할당 할 수 있고,
2. 파라미터(parameter)로 전달 할 수 있고,
3. 함수의 반환 값으로 사용할 수 있다.
// 1. 변수에 할당 할 수 있다.
let test = function(a,b){
return a + b;
}
// 2. 파라미터로 전달 할 수 있다.
// -> me에 파라미터로 algorithm을 넣어 '어렵다..'가 출력된다.
let algorithm = function(){
let algo = "어렵다..";
return algo;
}
let me = function(text){
console.log(text);
}
me(algorithm()); //어렵다.. 출력
//3. 함수의 반환 값으로 사용할 수 있다.
function javaScript(){
return function(){
console.log("자바스크립트도 어려워요");
}
}
let me = javaScript();
me();
자바스크립트에서의 함수는 일급객체이다.
다른언어에서는 함수가 값이 될 수 없지만, 자바스크립트에서는 값이 될 수 있다.
(값이기 때문에 변수로 할당하고, 다른 함수의 인자로 전달되고,
반환 값으로도 사용 할 수 있다.)
1. 생성자 함수란 ‘객체’를 생성할 때 사용하는 함수이다.
2. 여러개의 동일한 프로퍼티를 가지는 객체를 생성하기 위해서 필요하다.
3. 생성자 명은 일반 함수와 구별하기 위해 대문자로 시작한다.
4. new 키워드를 통해 생성자 함수를 호출한다.
5. 또한 부모함수명.prototype.생성할함수명 = function() {}으로도
생성 가능하다.