반응형 Archive188 try ... catch 와 에러 핸들링 예상치 못한 에러가 발생하면, 스크립트는 즉시 중단되고 콘솔에 에러가 출력된다. 하지만 스크립트가 죽는경우는 최악의 경우이기 때문에, 에러 발생 소지가 있는 곳에서 try.. catch 구문을 통해 발생한 에러를 핸들링할 수 있다. try 구문에는 실행가능한 코드만 동작한다. 코드를 읽는 중에 발생하는 에러를 parse-time error 라고하고, try 구문 내용이 유효한 코드만 에러를 처리할 수 있다. 이런 에러를 runtime error 혹은 exception 이라고 한다. 에러처리가 안되는 경우 scheduled 된 코드에서 발생한 예외는 잡을 수 없다. 콜백함수 내의 코드는 실행될 시점에는 try.. catch문 바깥영역이기 때문이다. try { setTimeout(function() { no.. 2022. 9. 4. 내장 클래스 확장하기 상속을 유연하게 사용할 때는 기존의 클래스를 확장하고자 할때 라고생각한다. 예를들면 배열에 isEmpty()라는 메서드를 추가하고자 한다면 아래와 같이 할 수 있다. class MyArray extends Array { isEmpty() { return this.length === 0; } } let arr = new MyArray(); console.log(arr); // [] console.log(arr.isEmpty()); // true 2022. 9. 3. class의 정적 메서드, 정적 프로퍼티 prototype이 아닌 함수 자체에 메서드를 설정할 수 있는데, 이를 정적 메서드라고 한다. (static method) class User { constructor() {} static staticMethod() { console.log(this); } say() { console.log(this); } } console.log(User.prototype.constructor); // [class User] console.log(User); // [class User] User.staticMethod(); // [class User] let u = new User(); User.prototype.say(); // {} u.say(); // User {} 즉, 함수를 객체로서 보았을때 프로퍼티를 추가한.. 2022. 9. 3. 클래스 문법 클래스란 무엇일까? 클래스는 객체지향 프로그래밍에서 객체를 생성하기 위해 변수와 메서드를 정의하는 일종의 틀로, 객체를 정의하기 위한 상태와 메서드로 구성된다. 개발을 하다보면 물건같이 동일한 객체를 여러개 생성해야하는 경우가 생긴다. javascript 에서는 객체를 생성하는 생성자 함수 new + function 을 사용할 수 있다. 그러나 객체지향 프로프로그래밍을 하기에는 불편한 점이 있었고, 이후에 도입된 class 문법을 사용하면 객체지향 프로그래밍에서 사용되는 다양한 기능을 javascript에서도 구현할 수 있게 되었다. (즉, 생성자함수 !== class) 이후에 추가된 문법답게 기존의 prototype을 내부적으로 활용하는데 흥미로웠다. 기본문법 new 클래스() 를 호출하면 내부에서 정.. 2022. 9. 3. prototype 과 상속 자바스크립트에서는 class가 태초에 없었기 때문에, 객체를 상속하기 위한 방법으로 prototype이라는 숨김 프로퍼티를 이용했다. 숨김프로퍼티는 개발자가 값을 설정하거나 변경할 수 없는데 원칙인데, 특별한 이름인 __proto__를 사용하여 값을 설정할 수 있다. let animal = { eat: true, } let rabbit = { jump :true } rabbit.__proto__ = animal; console.log(rabbit.eat) // true 객체는 기본적으로 자신에게 프로퍼티를 찾아보고, 없다면 [[Prototype]에서 찾아본다. __proto__ 는 [[Prototype]]용 getter, setter 이다. ( __proto__ != [[Prototype]]) 아래처럼 .. 2022. 9. 1. 함수 바인딩 함수는의 this는 실행시점에서 결정된다. 쉽게말하면 obj.function() 이렇게 호출될때 결정되는데, dot 앞의 객체가 this가 된다. 그런데 만약 콜백으로 함수자체를 전달해버리면 this가 사라지는 문제가 발생한다. setTimeout의 독특함 setTimeout함수는 특별하게 동작하는데, 전달받은 함수를 호출할때 this에 window를 할당하고, node에서는 타이머 객체에 할당한다. 그러므로 본 함수의 내부적으로 this는 엉뚱한 객체를 가르키게 되는것이다. 아래의 코드를 봤을때, user객체를 참조할 것 같지만, 내부의 sayHi()만이 전달된 상황이라 context를 잃어버리게 된다. let user = { firstName: "John", sayHi() { alert(`Hello,.. 2022. 9. 1. 이전 1 2 3 4 5 ··· 32 다음 반응형