본문 바로가기

전체 글

(6)
[JavaScript] This...This...This!! 다른 언어에선 쉬울 수 있으나, JavaScript에서의 this란 정말 정말 난해하다. this의 본 의미는 "자기를 참조하는 변수" 이다. 생성자 함수를 예로 들어보면, 생성자 함수를 정의하는 시점에서는 아직 인스턴스를 생성하기 전이기 때문에 자신이 속한 객체나 생성할 인스턴스를 가리키는 식별자가 필요하다. 이를 위해서 존재하는 것이 this이다. 즉, this는 자신이 속한 객체나 자신이 생성할 인스턴스의 프로퍼티 혹은 메서드를 참조할 수 있다. 그렇다면 this는 어떤식으로 동작할까? 기본적으로 JavaScript의 this는 함수 호출 방식에 의해서 동적으로 결정된다. 식별자와 값을 연결하는 과정을 binding이라고 하는 데, JavaScript에서는 크게 4가지 방식이 존재한다. const ..
[JavaScript] 프로토타입 체인 자바스크립트는 프로토타입 기반 객체 지향 언어이다. 자바스크립트의 모든 객체는 자신의 부모 역할을 하는 객체와 연결이 되어 있는데, 이러한 부모 객체를 프로토타입 객체(이하 프로토타입)라고 부른다. const student = { name: 'Lee', score: 90 }; // student에는 hasOwnProperty 메소드가 없지만 아래 구문은 동작한다. console.log(student.hasOwnProperty('name')); // true console.dir(student); /** _proto__: constructor: ƒ Object() hasOwnProperty: ƒ hasOwnProperty() isPrototypeOf: ƒ isPrototypeOf() propertyIsEn..
[JavaScript] 객체의 변경을 방지하는 방법 자바스크립트에서 객체는 변경 가능한 값이므로 재할당없이 직접적으로 변경이 가능하다. 이를 방지하기 위한 많은 방법이 있는데, 불변성을 확립해주는 라이브러리를 사용한다던지, Object 메서드를 이용하여 객체를 복사하여 변경하는 방법, 그리고 객체의 변경을 애초에 방지하는 방법이 있다. 오늘은 얉은 복사를 통해 객체의 변경을 방지하는 방법을 알아보고자 한다. 1. Object.preventExtensions() - 객체의 확장을 금지하는 메서드. const animals = { name: "Lion", age: 12 }; console.log(Object.isExtensible(animals)); // 확장이 가능한 지 묻는 Object 메서드 Object.preventExtensions(animals);..