2011-01-26 4 views
1

"클래스"및 상속 기능을 위해 프로토 타입 javascript 프레임 워크를 사용하고 싶습니다. 다른 모든 것들을 위해서 나는 jQuery를 사용할 것이다. 저에게이 기능을 제공 할 최소한의 프로토 타입 버전이 있습니까? 내가 전체를 사용하지 않는다면 전체 라이브러리의 추가 오버 헤드를 원하지 않는다.최소 프로토 타입 (js 프레임 워크)

var FirstClass = Class.create({ 
    // The initialize method serves as a constructor 
    initialize: function() { 
    this.data = "Hello World"; 
    } 
}); 

및 다른 클래스 확장하기 :

MyNewClass = Class.create(FirstClass, { 
    //Override the initialize method 
    initialize: function() { 
    //.. 
    }, 
    // ...more methods add ... 
}); 

플러스 I를

내가 (위키 피 디아에서 예)를 다음과 같이 나 클래스를 정의 할 수 있습니다 클래스와 상속 기능을 원하는 구체적으로 프레임 워크 간의 충돌을 원하지 않습니다. (예 : $ 은 jQuery에서 사용합니다. 클래스 생성/상속을위한 프로토 타입 (또는 다른 제안은 괜찮을 것입니다.) 만 필요합니다.

+0

음, 정확히 어떤 클래스와 상속 기능이 있습니까? 예를들 수 있습니까? 왜냐하면 일반적으로 태양 아래서는 무엇이든 jQuery가 있기 때문입니다. JS 원시 'prototype' 키워드와 함께 사용하지 않습니까? –

+0

좋은 객체 지향 프레임 워크를 원한다면 mootools를 살펴볼 것입니다. 내가 언급 한 것처럼 – Adrian

+0

. 대부분의 기능에 jQuery를 사용하고 싶습니다. 그러나 jQuery는 프로토 타입에 자동으로 할당되는 클래스 (생성자 포함)를 멋지게 정의하는 것을 허용하지 않습니다 (클래스 확장 등의 옵션 포함). 필자 만의 고유 한 기능을 쓸 수도 있지만 프로토 타입 프레임 워크처럼 잘 설정된 것을 사용하는 것이 더 합리적이라고 생각합니다. – lan

답변

5

Inheritance.js은 Prototype 라이브러리를 개발 한 사람들로부터 영감을 얻은 모델이었습니다. 나는 그것이 당신이 요구하는 곳이라고 생각합니다.

참고 : $super은 아래의 설명에 명시된 것처럼 this.parent 인 것으로 보입니다.

function clone(obj) { 
    if(typeof obj !== 'undefined') { 
     clone.prototype = obj; 
     return new clone; 
    } 
} 

function copy(dest, src) { 
    for(var name in src) { 
     if(src.hasOwnProperty(name)) 
      dest[name] = src[name]; 
    } 
} 

function classof(constructor) { 
    return { 
     extend : function(base) { 
      constructor.prototype = clone(base.prototype); 
      return this; 
     }, 

     mixin : function(members) { 
      copy(constructor.prototype, members); 
      return this; 
     } 
    }; 
} 

사용 예제 :

// base class: 
function Foo(value) { 
    this.value = value; 
} 

classof(Foo).mixin({ 
    inc : function() { ++this.value; } 
}); 

// derived class: 
function Bar() { 
    Foo.apply(this, arguments); 
} 

classof(Bar).extend(Foo).mixin({ 
    dec : function() { --this.value; } 
}); 

var bar = new Bar(42); 
bar.inc(); 
bar.dec(); 
+0

소품, 이건 좋은 발견이야. 모든 방법을 프로토 타입! –

+0

@Max : 프로토 타입의 소스 코드에 언급되어 있습니다. – mhitza

+0

나는 단지 inheritance.js의 프로토 타입을 바꿀 수 있었지만 프로토 타입처럼 $ super가없는 것처럼 보입니다. – Jerinaw

3

당신은 최소한 뭔가를 찾고 있다면. 내 경험에 의하면 그들은 함께 놀지 않는다고 말한다. 나의 개인적인 취향은 뛰어난 구문 설탕으로 인해 Prototype을 사용하는 것입니다.

Prototype의 $ -function을 사용 중지 할 방법이 없습니다. jQuery의 $를 jQuery.noConflict()를 통해 사용하지 못하게 할 수 있지만 완벽하지는 않습니다.

@mhtiza에 따르면, jQuery를 고수하기로 결정한 경우 class-sugar에 Interitance.js를 사용합니다.

2

프로토 타입과 jQuery를 함께 사용하지 마십시오

+0

프로토 타입을 고집하는 것. jQuery에 대한 필요성이 있다면 그걸 고수하고 더 큰 Prototype이 포함되는 즉시 jQuery가 outclassed (IMO)되고 중복된다. – clockworkgeek

1

버전 1.7.1의 경우 prototype.js 파일의 1625 행 아래에있는 모든 항목을 삭제했으며 더 이상 부트 스트랩 및 jquery와 충돌하지 않습니다. 그리고 Class.create 함수는 여전히 작동합니다. class.create는 내가 원했던 유일한 메소드입니다.

+0

나는 모든 것을 시험하지는 않았지만, 처음에는 매력처럼 작동합니다. 여러분 모두 jquery 사용자들만이 더 나은 클래스와 같은 지원을 찾고 있습니다. 이것은 실행 가능한 옵션 일 수 있습니다. –