본문 바로가기

Javascript/Javascript 객체지향8

[생활코딩] 객체지향 - prototype vs proto 함수란 무엇인가? 함수는 자바스크립트에서 만큼은 독특하다. statememt로 보이지만 사실 객체이다. function Person(){} 과 var Person = new Function(); 은 같다. 객체이니까 때문에 프로퍼티를 가질 수가 있다. Person 객체를 생성하면 Person의 prototype 객체가 생긴다. 서로가 연관되어 있어서 서로를 알고있어야 된다. Person 객체는 내부적으로 프로토타입이라는 프로퍼티가 생기고, 그 프로퍼티는 Person의 프로토타입 객체를 가르킨다. (Person.prototype이 Person's prototype인거다.) Person's prototype 객체도 자신이 Person에 소속되어 있다는것을 표시하기 위해서 어딘가에 기록해야된다. 그래서 con.. 2020. 8. 5.
[생활코딩] 객체지향 - 객체와 함수 / call / bind 자바스크립트는 객체가 다른 객체를 상속 받는데, 런타임 되는동안 또 다른 객체를 상속 받을 수 있을 정도로 굉장히 유연하다. (__proto__ / Object.create()를 통해서) sum은 어떤 객체에도 속해있지 않는다. 이 전에 살펴본 sum의 역할은 객체 안에서 first와 second를 더 해주는 역할을 했었다. sum.call()을 적어주면 sum이라고 하는 객체를 실행시키는것이다. sum() 과 똑같은거다. 모든 함수는 call 이라고 하는 메소드를 가지고 있다. call 메소드를 호출할때 첫 번째 인자로 kim을 주면 this = kim이 된다. call은 첫 번째 인자로는 그 함수의 내부적으로 this를 무엇으로 할것인지가 오고, 두 번째 인자부터는 우리가 호출하려고 하는 함수의 파라.. 2020. 8. 4.
[생활코딩] 객체지향 - super / 객체상속 class Person{ constructor(name, first, second){ this.name = name; this.first = first; this.second = second; } sum() { return this.first + this.second } } class PersonPlus extends Person{ avg(){ return (this.first + this.second)/2; } } var kim = new PersonPlus('kim',10 ,20); console.log('kim.sum()', kim.sum()); console.log('kim.avg()', kim.avg()); 코드에서 아쉬운 부분이 있다. PersonPlus 클래스에 first와 second 외에.. 2020. 8. 1.
[생활코딩] 객체지향 - 메소드 구현 / 상속 전통적인 방법에서는 생성자 함수에서의 prototype 객체에 sum이라는 프로퍼티를 함수로 지정하는것을 통해서 Person이라는 생성자로 만들어진 모든 객체가 공유할수있는 함수를 만들수있었다. 우리가 class에서는 어떻게할까? 첫 번째는 저 방법은 그대로 사용하는것이다.(class는 이미 있는것에서 문법만 좀 추가된것이므로) 두 번째 저렇게 안에 넣어서 사용가능하다. (clasas는 function을 안붙인다.) kim이라고 하는 객체만은 다르게 동작하는 함수를 정의하고 싶다면 전에 사용했던 같은 방법으로 정의하면 된다. 자바스크립트는 우선 kim이라는 객체가 sum이라는 함수를 가지고 있는지를 확인해보고, 없다면 kim이라는 객체의 person이라는 객체에 sum이라는 메소드가 정의되었는지 보고 있.. 2020. 7. 31.