2012-12-14 4 views
1

프로토 타입을 사용할 때 사용할 수있는 많은 자료가 있지만 거기에는 여러 가지 제안 된 방법이 많이 있으며 광산을 찾으려고합니다. 난 정말 아래의 구조에 대한 피드백을 찾고 있는데, 문제가 있다면 그것을 보아라. 미리 감사드립니다.Javascript 프로토 타입을 사용하는 모범 사례

function Class(){} 

Class.prototype = { 
    MethodOne: function() { 

    }, 
    MethodTwo: function() { 

    }, 
    MethodThree: function() { 

    } 
} 
+0

자본금 F가 있습니까? – bits

+3

질문에 답하기 위해 구문에 맞게 보입니다. 하지만 모두 유스 케이스에 달려 있습니다. 결국이 객체를 다른 객체로 상속받을 객체로 만들려고합니까? – bits

+0

프로토 타입에 대한 귀하의 목표는 무엇인지 알아 내고 세부 사항으로 질문을 업데이트하고 의견을 알려주십시오. – bits

답변

2

전체적으로 완벽! 이것이 내가 수업을 만드는 방법이기도합니다. 다음은 몇 가지 사소한 수정 사항입니다.

function Class() { 
    return this; 
} 

Class.prototype = { 
    methodOne: function() { 

    }, 
    methodTwo: function() { 

    }, 
    methodThree: function() { 

    } 
} 

1) 메소드 이름을 소문자로 변경했습니다. 그냥 컨벤션을 위해서.
2) 생성자가이 객체 (새로 생성 한 객체)를 반환하도록 설정합니다.

var obj = new Class(); 
obj.methodOne(); 
+1

생성자에'return this '를 넣을 필요가 없습니다. 기본 동작입니다. 그러나 생성자가 'this'와는 다른 객체를 반환 할 수 있지만 원시 값을 반환 할 수 없다는 것을 알고있는 것이 좋습니다. – dreame4

2

당신이있는 거 예를 정말 간단하고 구문 올바른 : 당신이 클래스를 생성하면 당신이 원하는 사용할 수 있습니다
3). 그러나, 나는 당신과 나의 생각을 공유하고 싶습니다.

먼저 Class 생성자의 프로토 타입 개체를 완전히 바꿉니다. 괜찮습니다. 그러나 Class으로 생성 된 객체로부터 생성자에 대한 참조를 잃게됩니다. 그것이 진짜 생성자의로

var a = new Class(); 
a.constructor; // => function Object() { [native code] } 

그것이 Class 더 나은 경우 constructor 속성 점하지 않을까요 : 당신이 코드를 사용하십니까? 문제를 해결하려면 Class 프로토 타입에 constructor 속성을 추가해야합니다. 좋아요 : Class.prototype.constructor = Class.

둘째, 대개 소문자로 시작하는 개체 메서드를 볼 수 있습니다. 그것은 오히려 관습이지만 모든 원시 객체의 메서드가 정의되는 방법입니다. 예를 들어, 기본값 Date 오브젝트 (Date.prototype.*)에 정의 된 메소드를보십시오. 모두 소문자로 시작합니다.

관련 문제