2011-10-26 5 views
1

자바 스크립트와 캔버스에서 프레임 워크 (학문적으로) 애니메이션을 만들고 싶습니다. 자바 스크립트로 객체 지향 프로그래밍 가이드를 찾기 시작했고 너무 많은 변형을 찾습니다.자바 스크립트에서 OOP를 구현하는 더 좋은 방법

예 :

그렇게 할 수있는 올바른 또는 가장 좋은 방법 (간단하고 빛을)입니다
// Example 1 
var object = { 
    public_method: function(){ //do something } 
} 

// Example 2 
function object(){ 
    this.public_method = function(){ //do something } 
} 
var o = new object(); 

.

참고 : 이런 종류의 프로젝트에 대한 좋은 디자인 패턴은 무엇입니까?

+0

아니요; 첫 번째 형식은 JavaScript의 프로토 타입 상속을 사용하지 않고 두 번째 형식은 각 개체 인스턴스에 대해 새 클로저를 만듭니다. – Phrogz

+0

나는 강력하게 [this] (http://stackoverflow.com/questions/1595611/how-to-properly-create-a-custom-object-in-javascript)의 질문에 대한 대답을 읽는 것이 좋습니다. – ZenMaster

답변

4

첫 번째 인스턴스는 하나의 인스턴스 만 만들고 두 번째 인스턴스는 여러 인스턴스를 만드는 데 사용됩니다.

나는 생성자 함수를 사용하여 프로토 타입에 메서드를 넣는 것을 선호합니다. 당신이 (약 클래스를 회전하는) 고전적인 OOP 디자인과 유사합니다 무언가를 원하는 경우에

function ExampleObject() { 
    this.answer = 42; 
} 

ExampleObject.prototype = { 
    get_answer: function(){ return this.answer; }, 
    another_method: function(){} 
}; 

var obj = new ExampleObject(); 
alert(obj.get_answer()); 
+1

프로토 타입의 함수 설정과 '생성자'의 각 객체 인스턴스에 대한 클로저 생성 간의 차이점을 명확히 설명하는 것이 좋습니다. 또한 예제에서'Object' 이외의 것을 사용하도록 강력히 추천합니다. – Phrogz

+0

@Phrogz : 좋은 지적입니다. – Guffa

+0

@ Guffa 나는 또한 당신이 적어도 당신의 방법과 함께 오는 global name space/변하기 쉬운 오염 위험에 대해 언급 할 것을 추천한다. – ZenMaster

3

것은, 당신이해야 : 방법이 모든 인스턴스에 대해 한 번 생성 대신에 각 인스턴스에 대해 별도로 만들어 그 방법 이 같은 :

function MyClass(param1, param2) { 
    this.param1 = param1; 
    this.param2 = param2; // These are fields. 
} 
MyClass.prototype.publicMethod = function() { 
    // do something 
} 
var o = new MyClass(x, y); 

난 당신이 더 약 prototype 읽으십시오. 이를 통해 메모리, 실행 및 프로그래밍을 낭비하지 않고 동일한 "클래스"의 많은 인스턴스를 생성 할 수 있습니다. 각 인스턴스에 대한 메소드를 별도로 정의합니다.

관련 문제