Javascript의 class에서는
class 내부에는 constructor 내부 말고 외부에서도 object들이 사용가능한 속성같은걸 만들 수 있다.
class Person {
성 = 'choi';
}
let john = new Person()
console.log(john)//Person {성: 'choi'}
class 중괄호 안에다가 변수처럼 만들면 되는데.. ( var let 키워드 그런거 안쓰는것이 특징! )
그럼 class Person
으로부터 나온 isntance인 object에는
성='choi'
를 복사해준다.
이렇게 class 내부와 constructor 외부에서 만든 속성을 field
라고 한다.
필드값에 타입 지정은 아래와 같다. 그냥 변수에 타입지정 하듯이..
class Person {
성: string= 'choid'
}
constructor 안에서 변수의 타입을 지정을 일단 해보자
class Person {
constructor(){
this.성 = 'choi'
}
}
에러가 뜬다 .
타입이 존재하지 않는다고 하니 일반 변수에 타입 지정하듯이 해보자
class Person {
constructor(){
this.성 : string = 'choi'
}
}
에러가 난다.
문법에 맞게 쓰지를 않아서 에러가 난다 .
그렇다면 어떻게 하란 말인가..
this.변수를 constructor안에서 사용하고 싶다면 미리 필드값으로 만들어줘야 한다 .
class Person {
name;
age;
constructor (){
this.name = 'kim';
this.age = 20;
}
}
필드 값으로 name
, age
가 미리 정의되어있어야 constructor
안에서도 사용가능하다 .
class Person {
name;
age;
constructor ( a :string ){
this.name = a;
this.age = 20;
}
}
뭔가 함수같이 생긴 것들은 함수처럼 타입지정하면 된다.
class 내부라고 다른거 아님- 쫄지말자..
Q. 필드값이랑 constructor랑 똑같은 역할이네요? 왜 구분해놓음?
A .
똑같은 기능을 한다.
근데 new Person() 사용할 때 파라미터로 뭔가 집어넣고 싶으면 constructor로 만들어서 사용하자.
일반 함수 타입 지정과 동일하다.
class Person {
speak(x?:string):string|void{
if(typeof x ==='string'){
return x
}
}
}
class에서 this.변수를 사용하고 싶으면 field에서 변수를 선언먼저 해주기
메소드의 타입은 일반 함수에 타입정의 하기와 똑같다.