비슷한 모양의 객체를 생성하기 위한 두 가지 방법
1. 생성자 함수
const User = function(name, age){
this.name = name;
this.age = age;
this.showName = function(){
console.log(this.name);
}
}
const mike = new User('Mike', 30);
2. class
// class 사용
class User2 {
// constructor : 객체를 만들어주는 생성자 메소드
// new 를 통해 호출하면 자동으로 실행됨
constructor(name, age){
this.name = name;
this.age = age;
}
// 클래스 내에 정의한 메소드는 User2의 prototype에 저장됨.
//
showName(){
console.log(this.name);
}
}
const tom = new User2('Tom', 13);
mike.showName(); // Mike
tom.showName(); // Tom
const User = function(name, age){
this.name = name;
this.age = age;
}
// User생성자 함수로 생성하는 객체에 showName 프로퍼티를 추가해줌
User.prototype.showName = function(){
console.log(this.name);
}
const jane = new User('Jane', 12);
jane.showName(); // Jane
1. 함수 호출 시 규칙
// 생성자함수
const User = function(name, age){
this.name = name;
this.age = age;
}
User.prototype.showName = function(){
console.log(this.name);
}
const mike = new User('Mike', 30);
console.log(mike); // undefined
// class
class User2 {
constructor(name, age){
this.name = name;
this.age = age;
}
showName(){
console.log(this.name);
}
}
const tom = User2('Tom', 13);
console.log(tom) // error! Uncaught TypeError: Class constructor User2 cannot be invoked without 'new'
2. for in 문 사용
// 생성자함수
const User = function(name, age){
this.name = name;
this.age = age;
}
User.prototype.showName = function(){
console.log(this.name);
}
const mike = new User('Mike', 30);
for(const p in mike){
console.log(p)
}
// "name"
// "age"
// "showName"
// class
class User2 {
constructor(name, age){
this.name = name;
this.age = age;
}
showName(){
console.log(this.name);
}
}
const tom = new User2('Tom', 13);
for(const p in tom){
console.log(p)
}
// "name"
// d"age"
hasOwnProperty()
를 사용했어야함.class Car {
constructor(color){
this.color = color;
this.wheels = 4;
}
// class내부에서 선언한 메소드는 __proto__ 내부로 들어감
drive(){
console.log('부릉');
}
stop(){
console.log('멈춰!');
}
}
// Car를 상속하여 Bmw 생성
class Bmw extends Car {
// class내부에서 선언한 메소드는 __proto__ 내부로 들어감
park(){
console.log('주차');
}
}
const z4 = new Bmw('blue');
z4.drive(); // 부릉
class Car {
constructor(color){
this.color = color;
this.wheels = 4;
}
drive(){
console.log('부릉');
}
stop(){
console.log('멈춰!');
}
}
// Car를 상속하여 Bmw 생성
class Bmw extends Car {
park(){
console.log('주차');
}
// Car와 동일한 메소드를 추가한 상태에서 Car 상속
stop(){
console.log('STOP!!');
}
}
const z4 = new Bmw('blue');
z4.stop() // STOP!!
super.메소드()
와 같이, 부모 클래스에서 정의된 메소드를 사용하는 것class Car {
constructor(color){
this.color = color;
this.wheels = 4;
}
drive(){
console.log('부릉');
}
stop(){
console.log('멈춰!');
}
}
// Car를 상속하여 Bmw 생성
class Bmw extends Car {
park(){
console.log('주차');
}
// Car와 동일한 메소드를 추가한 상태에서 Car 상속
stop(){
super.stop();
console.log('STOP!!');
}
}
const z4 = new Bmw('blue');
z4.stop()
// 멈춰!
// STOP!!
// instance의 메소드부터 탐색됨
class Car {
constructor(color){
this.color = color;
this.wheels = 4;
}
drive(){
console.log('부릉');
}
stop(){
console.log('멈춰!');
}
}
// Car를 상속하여 Bmw 생성
class Bmw extends Car {
constructor() {
this.navigation = 1;
}
park(){
console.log('주차');
}
}
const z4 = new Bmw('blue');
// error!
// VM39:17 Uncaught ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor at new Bmw
super();
키워드로 부모 클래스의 constructor를 실행해줘야함.class Car {
constructor(color){
this.color = color;
this.wheels = 4;
}
drive(){
console.log('부릉');
}
stop(){
console.log('멈춰!');
}
}
// Car를 상속하여 Bmw 생성
class Bmw extends Car {
constructor() {
super();
this.navigation = 1;
}
park(){
console.log('주차');
}
}
const z4 = new Bmw('blue');
console.log(z4);
/* Bmw {color: undefined, wheels: 4, navigation: 1}
color: undefined
navigation: 1
wheels: 4
...
*/
class Car {
constructor(color){
this.color = color;
this.wheels = 4;
}
drive(){
console.log('부릉');
}
stop(){
console.log('멈춰!');
}
}
// Car를 상속하여 Bmw 생성
class Bmw extends Car {
constructor(color) {
super(color);
this.navigation = 1;
}
park(){
console.log('주차');
}
}
const z4 = new Bmw('blue');
console.log(z4);
/*
Bmw {color: 'blue', wheels: 4, navigation: 1}
color: "blue"
navigation: 1
wheels: 4
*/
class Bmw extends Car() {
park() {
console.log('주차');
}
}
class Bmw extends Car() {
constructor(...args){
super(...args);
}
park() {
console.log('주차');
}
}
class Car {
constructor(color){ (3)
this.color = color;
this.wheels = 4;
}
drive(){
console.log('부릉');
}
stop(){
console.log('멈춰!');
}
}
class Bmw extends Car() {
constructor( (1) ){
super( (2) );
}
park() {
console.log('주차');
}
}