작성
·
160
·
수정됨
0
안녕하세요,
해당 섹션에서 this 타입이 각각 왜 string 인지, object인지 , 제가 제대로 이해 했는지 궁금해 질문 드립니다.
# 1. 영상 1:07 에서, 함수 getParam의 this
# 2. 영상 1:35 에서, 함수 getShortKeys의 this
# 1. 영상 1:07 에서, 함수 getParam의 this
function getParam(this:string, index:number){..중략..}
..중략...
console.log('asdf,1234,ok'.getParams(1))
this의 타입을 string로 한 이유는,
그 this 키워드를 정의한 함수,getParam는
function 키워드로 함수를 선언했고,
string('asdf,1234,ok'), 즉 문자열이 함수 getParam을 호출했기 때문에,
(=function으로 선언한 함수는, 해당 함수를 어떤 객체가 호출 했느냐로, this의 값(타입)이 결정되기 때문에 )
this가 string타입으로 되는건가요?
그래서
function getParam(this:string, index:number){
const params = this.splte(",")
}
this는 이미 문자열인 string타입으로 참조되기 때문에,
문자열 함수인 split()를 작성 해야하는 에러인건지요?
# 2. 영상 1:35 에서, 함수 getShortKeys의 this
//인터페이스 정의
getShortKeys(this:object):string[]
..중략...
//객체 obj
const obj={a:1, bb:2, ccc:3, ddd:4}
console.log(obj.getShortKeys())
this가 object인 이유는 함수,getShortKeys를 object(obj객체)가 호출했기 때문에,
this가 object 타입이 된건가요??
답변 1
0
안녕하세요
값과 타입을 구분해서 이해하시는 게 좋을 것 같습니다.
* 값 측면: String의 프로토타입에 추가한 함수는 this가 string입니다
* 타입 측면: (값에서)this가 string이기 때문에 타입도 그렇게 정의합니다
만약 getParam을 Object의 프로토타입에 추가했다면 타입 측면에서는 타입 에러가 발생하고, 값 측면에서는 런타임 에러가 발생합니다.
getShortKeys도 마찬가지입니다
* 값 측면: Object의 프로토타입에 추가한 함수는 this가 object입니다
* 타입 측면: (값에서)this가 object이기 때문에 타입도 그렇게 정의합니다