6장. 객체지향 프로그래밍 공통된 함수 객체(메서드)를 객체마다 생성하면 메모리 낭비 프로토타입 객체에 함수를 정의하자. 더글라스 크락포드식 메서드 정의 방법 Function.prototype.method = function (name, func) { this.prototype[name] = func; } function Person(arg) { this.name = arg; } Person.method("setName", function (value) { this.name = value; }) Person.method("getName",function () { return this.name; }) let me = new Person("me"); let you = new Person("you"); con..
진도가 느려진다. 이해가 안 가더라도 다시 찾아올 수 있도록 정리만 해 놓고 빠르게 넘어가자 실행 컨텍스트 c의 함수 호출 스택과 비슷 현재 실행되는 컨텍스트에서 이 컨텍스트와 관련 없는 실행 코드가 실행되면 (전역 코드, eval() 함수로 실행되는 코드, 함수 안의 코드) 새로운 컨텍스트가 생성되어 스택에 들어가고 제어권이 그 컨텍스트로 이동한다. 생성 과정 1. 활성 객체(=변수 객체) 생성 2. argument 객체 생성 (활성 객체는 arguments 프로퍼티로 이 객체 참조) 3. 스코프 체인 생성 (생성된 활성 객체가 스코프 체인 맨 앞에 추가) 4. 변수 생성 (instantiation), 값이 넘겨지지 않았으면 undefined가 할당 주의: 초기화(initialization)은 나중에 ..
this 바인딩 메서드(객체의 프로퍼티 중 함수인 것): 해당 메서드를 호출한 객체 (메서드를 가진 객체가 아님!!) 함수: 전역 객체 (브라우저에서 실행하는 경우 window 객체, Node.js와 같은 자바스크립트 런타임 환경에서는 global 객체) 내부 함수(함수 안의 함수): 정의되지 않음 -> let that = this; 사용, 명시적인 this 바인딩을 위한 call/apply/bind var val = 100; let myObj = { val: 1, func1: function () { this.val += 1; console.log('func1() called. this.val : ' + this.val); func2 = function () { this.val += 1; console..
함수 선언문 function funcName(x, y) { return x + y; } 내부적으로 함수 표현식으로 변환됨 let funcName = function funcName(x,y) { return x + y; }; 함수 표현식 함수 리터럴로 만든 함수를 변수에 할당하여 함수를 생성하는 것 let funcName = function (x,y) { return x + y; }; 이름을 안 붙일수도 있고 (익명 함수 표현식), 이름을 붙일 수도 있음 (기명 함수 표현식). 단, 이름을 붙여도 함수 내부에서 재귀적으로 호출하거나 디버거에서 구분을 위해 사용하는 것만 가능하고, 외부에서 해당 이름으로 호출할 수 없음. Function() 생성자 new Function(arg1, arg2, ... , ar..
총 281페이지: 123/45/67 챕터 데이터 타입: typeof 키워드로 확인 기본 타입 - number (실수형만 존재), string (문자열 리터럴은 특정 글자 재할당 불가), boolean, undefined, null 참조 타입 - object: array, function, 정규표현식 object 단순히 프로퍼티(key: value 형태)를 저장하는 컨테이너 (like 해시) 생성: 1. Object() 생성자 함수 2. 객체 리터럴 3. 생성자 함수 for in 문: 객체 프로퍼티 반복 delete 키워드: 객체 프로퍼티 삭제 변수는 참조 타입으로 객체를 가리킴 객체 비교 동등 연산자 == : 객체의 참조값 비교 함수 호출 call by value: 기본 타입 -> 값 복사 call by..