this this는 자신이 속한 객체 또는 자신이 생성한 인스턴스를 가리키는 자기 참조 변수 this 바인딩은 함수 호출 방식에 의해 동적으로 결정된다. strict mode가 적용된 일반 함수 내부에선 this는 undefined가 바인딩 된다. 일반 함수 내부에선 this를 사용할 필요가 없기 때문이다. 함수 호출 방식과 this 바인딩 일반 함수 호출 기본적으로 this에는 전역 객체가 바인딩 된다. 메서드 호출 메서드를 호출한 객체, 즉 메서드를 호출할 때 마침표(.) 연산자 왼쪽에 기술한 객체가 바인딩 된다. person.getName() 에서 getName()메서드의 this는 person에 바인딩 된다. 메서드 내부의 this는 프로퍼티로 메서드를 가리키고 있는 객체와 관계없고 메서드를 호출..
자바스크립트 객체의 분류 표준 빌트인 객체 ECMAScript 사양에 정의된 객체 전역 객체의 프로퍼티로서 제공 호스트 객체 ECMAScript 사양에는 정의 되어있지 않지만, 브라우저 환경 또는 Node.js 환경에서 추가로 제공하는 객체 브라우저 환경에선 DOM, BOM, Canvas, XMLHttpRequest, fetch, requestAnimationFram, SVG, Web Storage, Web Component, Web Worker와 같은 클라이언트 사이드 Web API를 호스트로 제공, node.js 환경에서는 고유의 API를 호스트 객체로 제공 사용자 정의 객체 사용자가 직접 정의한 객체 표준 빌트인 객체 표준 빌트인 객체에는 다양한 생성자 함수가 있음 생성자 함수로 생성한 인스턴스의 ..
instanceof 연산자 좌변은 객체를 가리키는 식별자, 우변에는 생성자 함수를 가리키는 식별자를 피연산자로 받는다. 우변이 함수가 아닌 경우 TypeError 불리언 값은 반환받는다 프로토타입의 constructor 프로퍼티가 가리키는 생성자 함수를 찾는게 아니라, 생성자 함수의 prototype에 바인딩딘 객체가 프로토타입 체인 상에 존재하는지 확인하는 것 Constructor에 영향을 받지 않는다. 직접 상속 Object.create에 의한 직접 상속 Object.create메서드는 프로토타입을 지정하여 새로운 객체를 생성한다. new 연산자 없이 객체 생성 가능 프로토타입을 지정하여 객체 생성 가능 객체 리터럴에 의해 생성된 객체도 상속받을 수 있다. 프로토타입 체인의 종점에 위치하는 객체는 O..
일급 객체 일급 객체란 무명의 리터럴로 생성할 수 있다. 즉 동적으로, 런타임에 생성이 가능하다. 변수나 자료구조(객체, 배열 등)에 저장할 수 있다. 함수의 매개변수에 전달할 수 있다. 함수의 반환값으로 사용할 수 있다. 함수는 일급 객체이다. 일반 객체와 동일하게 사용할 수 있다. 함수 객체의 프로퍼티 arguments 프로퍼티 arguments 프로퍼티의 값은 arguments 객체이다. 함수 호출 시 전달된 인수를 저장하는 순회 가능한 유사 배열 객체이다. 지역 변수처럼 사용된다. 매개변수의 개수보다 인수를 더 많이 전달한 경우 초과된 인수는 무시된다. 하지만 암묵적으로 arguments 객체의 프로퍼티로 보관된다. 매개변수 개수를 확정할 수 없는 가변 인자 함수를 구현할 때 유용하다. 유사 배열..
생성자 함수 객체 리터럴에 의한 객체 생성 방식의 문제점 동일한 프로퍼티를 갖는 객체를 여러 개 생성해야 하는 경우 같은 프로퍼티를 기술해야 하기 때문에 비효율적이다. 생성자 함수에 의한 객체 생성 방식의 장점 객체(인스턴스)를 생성하기 위한 템플릿(클래스)처럼 생성자 함수를 사용하여 프로퍼티 구조가 동일한 객체 여러 개를 간편하게 생성할 수 있다. function Circle(radius){ this.radius = radius; this.getDiameter = function () { return this.radius*2; } } const circle1 = new Cicle(5); cosnt circle2 = new Circle(10) 생성자 함수의 인스턴스 생성 과정 인스턴스 생성과 this 바..
내부 슬롯과 내부 메서드 내부 슬롯과 내부 메서드는 자바스크립트 엔진의 구현 알고리즘을 설명하기 위해 ECMAScript 사양에서 사용하는 의사 프로퍼티와 의사 메서드다. 이중 대괄호 ([[…]]) 내부 슬롯과 내부 메서드다. 내부 슬롯과 내부 메서드에 직접적 접근하거나 호출할 수 있는 방법을 제공하지 않는다. 단 일부 내부 슬롯과 내부 메서드에 한하여 간접적으로 접근할 수 있는 수단을 제공하기는 한다. ex) [[Prototype]] 내부 슬롯은 __proto__를 통해 간접적으로 접근 가능. 프로퍼티 어트리뷰트와 프로퍼티 디스크립터 객체 자바스크립트 엔진은 프로퍼티를 생성할 때 프로퍼티 상태를 나타내는 어트리뷰트를 기본값으로 자동 정의한다. 프로퍼티의 값 [[Value]] 값의 갱신 가능 여부 [[W..