2017-02-18 1 views
0

이 클래스의 정의를 참조 해주세요. 프로토 타입에도 공유되어 있는데, publicPrivilegedMethodOnInstance은 그렇지 않습니다.퍼팅 방법 (이)

정의의 단점은 publicPrivilegedMethodOnPrototype입니까? 나는 ECMAScript 5가 필요하다고 생각하고 MyClass가 인스턴스화 될 때마다 메소드가 재정의된다고 생각한다.

+0

'publicPrivilegedMethodOnPrototype'은 ** 폐쇄 **로 인해 개인 변수에 액세스 할 수 있습니다. –

+0

@ibrahimmahrir 네, 그 아이디어입니다. 'publicMethod'는 MyClass 함수 정의 바깥에 있기 때문에 그렇게 할 수 없습니다. –

답변

3

아주 나쁜 생각입니다.

많은 개체를 만들었지 만 모든 속성의 프로토 타입에 속성을 할당 할 때 특정 값에 액세스하지 못하던 기능도 있습니다. 이것은 매우 이상합니다.

소정의 프로토 타입 함수를 사용하여 그 this 프로토 소유 개체로부터 액세스 특성을 의미한다 : 따라서

function X() { 
    this.text = "hello world"; 
} 
X.prototype.doStuff() { 
    console.log(this.text); 
}; 

, 안티 패턴 것을 피한다. 그것은 말도 안돼. 내 조언은 맹목적으로 대안을 찾는 대신 JavaScript에서 액세스 수정 자의 부재를 처리해야한다는 것입니다.

+0

감사! "특정 값에 액세스하지 못하도록하는 기능조차도 그렇게 할 것입니다"_에 대해 자세히 설명해 주시겠습니까? 왜냐하면'MyClass.prototype === Object.getPrototypeOf (this)'가 아니기 때문에 메소드가 같은 "레벨"에 놓이게 되었습니까? 그러나'publicPrivilegedMethodOnPrototype'은 클로저 때문에 private 변수에 접근 할 수 있습니다. –

+0

@ TomSöderlund 네, 그리고 이것은 당신의 생각에 문제입니다. 마지막 생성자 함수 호출의 캡처 된 변수에 액세스하는 동일한 생성자 함수에서 생성 된 객체 이상을 상상합니까? : \ –

+0

아, 이제 당신의 요점을 봅니다. 감사! –