2014-12-15 2 views
1

클래스의 멤버 이름 (필드 및 메소드) 또는 적어도 필드 이름을 가져와야합니다. 나는 두 가지 해결책이JS - 클래스의 멤버 이름을 얻으십시오

function PersonClass(){ 
    this.name="Jack"; 
    this.surname="SomeOne"; 
} 

:

  1. 변환 클래스 문자열을하고 수업 방법을 만들고 for ... in this가 회원을 얻을 사용
  2. 정규식 사용 예를 들어, 나는 다음과 같은 클래스가 있습니다. 그러나이 메서드를 실행하려면 클래스의 인스턴스를 만들어야합니다.

나는 둘 다 좋아하지 않습니다. 회원 이름을 얻는 또 다른 해결책이 있습니까?

+0

console.dir()'? – user2570380

+1

"수업"이란 무엇입니까? 자바 스크립트 (ES6 이전)에는 클래스가 없습니다. – Pointy

+0

첫 번째 옵션을 설명해 주시겠습니까? 당신이 뭔가 특별한 것을 염두에두고있는 것처럼 보입니다. 생성자 함수에 대해 이야기하고 있습니까? "클래스"에 대한 코드를 제어합니까? –

답변

0

회원 이름을 얻은 후 회원 이름으로 무엇을 할 것입니까?

왜 특정 인스턴스를 생성하기 위해 생성자가 호출 될 때까지 존재하지 않을 때 어떻게 든 얻을 수 있다고 상상합니까?

왜 당신은 정규식을 써서 JS가 모든 필드 ("필드"가 아닌)를 꺼낼만큼 충분히 잘 파싱 할 수 있다고 생각합니까? 그러한 정규 표현식은 어떻게 다른 곳에서 정의 된 프로토 타입 메소드에 의해 동적으로 그리고 조건 적으로 추가 된 속성을 어떻게 식별 할 수 있습니까? 이 같은 메타 데이터를 기록 할 경우

, 그럼 그냥 생성자에 속성으로, 그래서 명시 적으로 대부분을 수행

PersonClass.properties = ['name', 'surname']; 

JS의 일부 멀리 떨어져 버전에서이 작업을 수행 할 수 있습니다 특수 효과를 통해 :

@properties('name', 'surname') 
function PersonClass() { ... 
+0

감사합니다. 내가 필요로하는 것들 자세한 내용은 여기에 기술되어있다. http://codereview.stackexchange.com/questions/73697/binding-model-to-view –

+0

당신은 엄청난 일을 앞두고있다. 다른 유사한 바인딩 프레임 워크가 아직 완성되지 않았다는 것을 어떻게 달성하기를 희망합니까? 'Object.observe' 또는'Proxy'가 브라우저에 접근 할 때 여러분이 만든 것은 무엇이든 즉시 구식이된다는 것을 알고 계십니까? 왜 지구상에서 IE8에 대해 걱정하고 있습니까? IE8 지원을 주장하는 고객을 위해 jQuery를 계속 작성하십시오. –

+0

IE8과 다른 많은 MS 제품이 얼마나 싫은 지 상상조차하지 못합니다. 하지만 당신은 나에게 묻지 말고 빌 게이츠가 왜 Win7에서도 기본 브라우저인지 묻습니다. 다른 프레임 워크에 대해서 - 나는 각도에서부터 시작했고 여기에서 끝냈다. http://stackoverflow.com/questions/27467908/angularjsrequirejs-and-modules 내 결론은 대형 애플리케이션에는 좋지 않으며 구조 외에도 다른 프레임 워크에는 적합하지 않다. + 나는 요청시 "런타임 컴파일"을 원한다. 페이지가 완전히로드 될 때까지 기다리지 말라. 나는 백본과 엠버를 보았다 - 그들의 템플릿은 나에게 좋지 않았다. –

0

개체의 prototype을 사용하면이 작업을 수행 할 수 있습니다. 예를 들어, 클래스와 같은 자바 스크립트 객체의 정의 주어진 :

var MyObject = function() { 

}; 
MyObject.prototype.foo = 3; 
MyObject.prototype.bar = function(){ 
    alert("bar"); 
}; 

이 작동됩니다 (어떤 경우는 필요 없음) :

for(var x in MyObject.prototype) 
    alert(x); // alerts "foo" and then "bar" 

을 같은 방식으로 인스턴스는 일반적으로

var o = new MyObject(); 
for(var x in o) 
    alert(x); // also alerts "foo" and then "bar" 
를 작동합니다
+0

감사합니다. 나는 시도 할 것이다. –

+0

아니, 좋지 않다. 첫 번째 방법은 프로토 타입 필드와 메서드 만 표시하지만 MyObject에서 선언 할 수는 없습니다. 두 번째 방법은 2를 참조하십시오. –