inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

코어 자바스크립트

생성자 함수에서 스태틱 메소드에 접근이 불가능하다는 부분이 이해가 되지 않습니다.

264

jjo

작성한 질문수 5

0

안녕하세요!  스태틱 메소드에 접근이 불가능하다는 부분이 이해가 안돼서 질문드립니다! 4분 50초 쯤에있는 코드에서, 아래와 같은 코드를 작성하면 인스턴스에서도, 스태틱 프로퍼티와 스태틱 메서드에  직접 접근이 가능할 것 같은데 안된다고 하셔서 다른 의미로 말씀하신건지 궁금합니다.

function Person(name, age){
    this._name = name;
    this._age = age;
    this.getInformations = function(instance) {
        return {
            name: instance._name,
            age: instance._age,
        };
    }
}

그리고, 추가적으로 궁금한 것이 있는데 constructor가 인스턴스를 생성할 때 어떤식으로 진행하는 것인지 궁금합니다.

var 인스턴스 = new 생성자함수();

라고 있을 경우에 생성자함수에 있는 모든 값을 그대로 복제해서 인스턴스를 생성하는 줄 알았는데 그게 아닌 것 같아서 궁금합니다.

제가 추측하기로는 new 연산자를 통해 플레인 생성자 함수의 prototype이 포함된 껍데기를 만들어 인스턴스를 생성하고, 생성된 인스턴스로 this 바인딩을 한 뒤에 함수가 실행되면서,  자연스럽게 this. 으로 되어있는 변수나 메서들만 새로운 인스턴스에 추가가 되는 것 같은데 이 순서가 맞는건지 궁금합니다!

감사합니다.

javascript

답변 1

1

정재남

1. 작성하신 Person 생성자함수에는 스태틱 메서드가 없습니다.
스태틱 메서드는 Person.getInformations 와 같이 클래스에 직접 부여하는 것이고,
프로토타입 메서드는 Person.prototype.getInformations와 같이 프로토타입 객체 안에 생성하는 것입니다.
객체지향 프로그래밍에 대해 더 알아보시면 좋겠습니다.

function Person(name, age){
    this._name = name;
    this._age = age;
}
Person.getInfoFromStatic = function(instance) {
    return {
        name: instance._name,
        age: instance._age,
    };
};
Person.prototype.getInfoFromPrototype = function() {
    return {
        name: this._name,
        age: this._age,
    };
};
var a = new Person('재남', 30);

a.getInfoFromPrototype(); // { name: '재남', age: 30 }
a.getInfoFromStatic();    // Error: a.getInfoFromStatic is not a function

2. 네, 올바른 추측입니다.
다만 우리 입장에선 어디까지나 '추측'일뿐 실제로 그렇게 동작하는지는 또 다른 얘기이겠죠.
정확한 로직은 자바스크립트 엔진의 동작과정을 까봐야 알 수 있을텐데,  저는 그럴 능력이 없습니다 ^^;

인스턴스에서 prototype 프로퍼티에 직접 접근해야하는 이유

0

59

1

setTimeout 에서 this

0

81

1

2강부터 영상이 나오지 않습니다.

0

175

1

자바스크립트 주석에 이상한 점이 있어서 문의드립니다.

0

219

2

return 문 안에 여러 함수가 존재하는 것이 이해되지 않습니다.

1

259

1

클래스 static 멤버

1

253

1

실행컨텍스트와 스택프레임

2

567

1

프로토타입으로 상속할때 브릿지 사용 이유

0

320

1

호이스팅 관련 질문

1

335

1

책 66p. 예제 3-2 질문입니다.

0

356

1

강의 내용 10:58 캡슐화 질문입니다.

1

398

1

강의 내용 5:10 질문입니다.

1

422

2

전역 공간에서의 this

0

426

2

18:31 addEventListener의 this

1

480

1

outerEnvironmentReference 질문

1

372

1

실행 컨텍스트와 클로저에 대해 질문드립니다.

1

448

1

Object.prototype.constructor의 [[prototype]] ?

1

658

1

함수를 값으로 할당할 때

2

457

1

15:54 'ddd' 사라지는 오류?

4

375

1

프로토타입 getPrototypeOf(instance).constructor(n,a) 질문입니다.

1

404

1

기본형/가변형 질문입니당

0

333

0

선생님 그러면 섹션 0만 봐도 무방한가요!?

0

336

1

Hoisting과 environmentRecord에 관한 질문입니다.

1

292

1

안녕하세요, 데이터 변경 질문입니다.

0

329

1