자바스크립트25 빌트인 객체 원시 값과 래퍼 객체 문자열이나 숫자, 불리언 등의 원시 값이 있는데도 문자열, 숫자 불리언 객체를 생성하는 String, Number, Boolean 등의 표준 빌트인 생성자 함수가 존재하는 이유는 뭘까? const str = 'hello'; // 원시타입인 문자열이 프로퍼티와 메서드를 갖고 있는 객체처럼 동작한다. console.log(str.length); // 5 console.log(str.toUpperCase()); // HELLO 원시 값에 대해 객체처럼 마침표 표기법이나 대괄호 표기법으로 접근하면 자바스크립트 엔진이 일시적으로 원시 값을 연관된 객체로 변환해준다. 즉, 원시 값을 객체처럼 사용하면 자바스크립트 엔진은 암묵적으로 연관된 객체를 생성하여 생성된 객체로 프로퍼티에 접근하거나 메서.. 2020. 11. 18. 프로토타입 상속과 프로토타입 상속은 객체지향 프로그래밍의 핵심 개념으로, 어떤 객체의 프로퍼티 또는 메서드를 다른 객체가 상속받아 그대로 사용할 수 있는 것을 말한다. 자바스크립트는 프로토타입 기반으로 상속을 구현하여 불필요한 중복을 제거한다. // 생성자 함수 function Circle(radius) { this.radius = radius; this.getArea = function() { return Math.PI * this.radius ** 2; } } const circle1 = new Circle(1); const circle2 = new Circle(2); 위 코드를 보면 Circle 인스턴스를 생성할 때마다 getArea 메서드를 중복 생성하고 모든 인스턴스가 중복 소유한다. 이럴 경우 메모리를 .. 2020. 11. 16. 생성자 함수에 의한 객체 생성 생성자 함수는 이름 그대로 객체를 생성하는 함수이다. 하지만 클래스 기반 객체지향 언어의 생성자와는 다르게 일반 함수와 동일한 방법으로 생성자 함수를 정의하고 new 연산자와 함께 호출하면 해당 함수는 생성자 함수로 동작한다. function Circle(radius) { this.radius = radius; this.getDiameter = function() { return 2 * this.radius; }; } const circle = new Circle(1); console.log(circle); // Circle {radius: 1, getDiameter: f} /* 만약 this가 아닌 다른 객체를 명시적으로 반환하면 this가 반환되지 못하고 return 문에 명시한 객체가 반환된다. *.. 2020. 11. 16. 객체 변경 방지 객체는 변경 가능한 값이므로 재할당 없이 직접 변경할 수 있다. 즉, 프로퍼티를 추가하거나 삭제할 수 있고, 프로퍼티 값을 갱신할 수 있으며, Object.defineProperty, Object.defineProperties 메서드를 사용하여 프로퍼티 어트리뷰트를 재정의할 수 있다. 구분 메소드 프로퍼티추가 프로퍼티삭제 프로퍼티 값읽기 프로퍼티 값쓰기 어트리뷰트 재정의 객체 확장 금지 Object.preventExtensions X O O O O 객체 밀봉 Object.seal X X O O X 객체 동결 Object.freeze X X O X X 객체 확장 금지 Object.preventExtensions 메소드는 객체의 확장을 금지한다. 이 의미는 프로퍼티 추가 금지를 의미한다. 삭제는 가능하다. .. 2020. 11. 16. 이전 1 2 3 4 5 6 7 다음