2009-07-08 3 views
15

우리는 최근에 Prototype을 사용하여 웹 앱을 만들었고, 상당량의 Class.Create() 기능을 사용했습니다. 지금은 '더 나은'라이브러리로 간주되기 때문에 jQuery 로의 마이그레이션을 고려 중입니다. 필자는 그 주제에 대해 약간의 연구를 해왔고 jQuery에는 Prototype과 같은 클래스 작성을위한 내장 된 내장 지원이 없다는 것을 알게되었습니다. 물론, .prototype과 jQuery.extend (https://stackoverflow.com/questions/79477/how-to-create-an-object-oriented-class-in-jquery에서 언급했듯이)가 있지만, 더 많은 검색을 한 후에 jQuery가 실제로이 방법으로 스크립트하고 싶지 않다는 느낌이 들었습니다.jQuery가 정규 OOP의 사용을 방해하는 이유는 무엇입니까?

동일한 페이지에는 John Resig의 Classy 플러그인에 대한 언급이 있습니다. 그러나이 페이지에는 실제로 April Julie Day의 농담이었으며 Resig는 실제로 코드를 사용하지 말 것을 권고합니다. 나는 기꺼이 기꺼이 하겠지만,이 모든 이유가 무엇인지 이해하고 싶습니다. 물론, 대신에 당신이 원하는 것은 무엇입니까? 누군가가 나를 계몽 할 수 있습니까?

-edit-

흥미로운 답변을 주셔서 감사합니다. 명확성을 위해서 : 이것은 프로토 타입에서 만든 클래스를 클래스를 '형성'하는 jQuery 방법으로 다시 작성하고 이전과 동일한 방식으로 여전히 사용한다는 의미입니까? 아니면 여전히 나쁜 습관으로 간주되고 다른 접근법을 사용해야합니까?

+4

귀하의 정보를 위해 JavaScript는 클래스 기반 언어가 아닙니다. 프로토 타입 기반 언어입니다. – rahul

+0

... 그리고 C보다 Lisp과 더 유사합니다. http://javascript.crockford.com/javascript.html – Boldewyn

+0

(차이를보기 위해 4 년의 이점을 가진 사람으로부터)이 [기사] (http://jqueryvsmootools.com/)은 Mootools와 JQuery에 관한 것으로, Mootools의 추론은 본질적으로 PrototypeJS에 적용됩니다. [motto] (http://jqueryvsmootools.com/#mottos) 섹션에는이 모든 내용이 나와 있습니다. TL; DR; JQuery는 DOM 조작을 위해 설계된 반면 Mootool (및 Prototype)은 프로토 타입 기본 언어 등에서 클래스 기본 OOP와 같은 DOM ** 및 ** 추가 유틸리티로 설계되었습니다. – OnesimusUnbound

답변

11

는 "객체 지향 자바 스크립트"에 대한 첫 번째 엉터리 Google 검색이 켜져 ...하지만 내가 통해 얻고 싶었다 점에 대해 설명합니다

JavaScript Object-Oriented Programming

그냥 당신이 첫 번째 단락에서 살펴보고을 찾기 :

자바 스크립트는 완전한 객체 지향 프로그래밍 언어는 아닙니다. JS에서 클래스 사용은 프로토 타입 기능을 기반으로합니다. Prototype 라이브러리는 프로토 타입 기능의 사용을 마스크하여 클래스를 만듭니다. jQuery는 일반 JS를 사용하여 jQuery 자체를 확장하고 사용자 정의 객체를 만드는 것과 같은 방법으로 프로토 타입 기능을 사용할 것으로 기대한다.

+7

jQuery는 JavaScript를 향상시키고 다른 언어를 시뮬레이트하지 않습니다. +1 – Boldewyn

+4

인용 된 단락이 잘못되었습니다. Javascript는 완벽한 객체 지향 프로그래밍 언어입니다. 클래스 기반 OO 언어가 아닙니다. Prototype의 설계자는 많은 사람들을 더 편안하게 만들기 위해 클래스 - 푸 (class-fu)를 제공하기로 결정했습니다. Crockford의 "Javascript : The Good Parts"를 읽었을 때, 나는 이것이 실수 였다고 생각합니다. –

+0

@ 콜린 : 정확함. 그리고 네, 총 실수. Dojo도 같은 이유로 싫어합니다. –

1

Prototype에서 jQuery로 변환 할 때와 똑같은 문제가있었습니다. 프로토 타입의 의미에서 모든 것이 그럴 것 같지 않다고 말할 수 있습니다. 여전히 jQuery를 코딩하면 JSON에 많이 의존하고있는 것을 알게 될 것이다. 나는 당신이 얻을 수있는 가장 공식적인 의사이다.

일부 jQuery UI는 실제로 전달한 매개 변수의 모든 속성에 대해 반복 작업을 수행하므로 Object.prototype을 전혀 수행 할 수 없다는 것을 의미합니다. 모든 객체에 대해 jQuery UI는 관련 매개 변수로 취급하려고 시도합니다.

속도와 확장 성을하지만, 놀라운, 그래서 난 당신이 프로토 타입을 극복하고,

4

jQuery for JavaScript programmers는 설명 : 저스틴의 응답이 실제로 유효한 지점을 수 있다는 사실과 용어를 cometo 전에 시간 문제라고 말하고 싶지만 jQuery가 좋은 OOP 기술을 장려하는 방법.

0

jQuery를이 내장 지원 클래스 생성 에 대한 프로토 타입처럼하지

간단뿐만 말아야 없습니다. 클래스 생성은 라이브러리가 아닌 프로그래머에게 맡기는 것이 가장 좋습니다. 프로토 타입 라이브러리에서 시작하여 너무 부풀어서 멀리 옮겼습니다. JavaScript의 OOP는 전혀 어렵지 않습니다. 프로토 타입을 사용하는 방법을 알고있는 한 괜찮을 것입니다.

Prototype의 Class.create을 처리 할 때 JavaScript에서 개인 멤버와 동일한 작업을하는 것이 까다로운 작업이됩니다. 그리고 솔직히, 나는 Class.create이 당신에게 유용한 것을 제공하지 않는다고 생각합니다. 여러분 자신이나 jQuery로 쉽게 할 수 없다고 생각합니다.

전환을 돕기 위해 항상 두 라이브러리를 동시에 사용할 수 있습니다. jQuery는 noConflict 기능을 사용하여 $ 기능을 원래 소유자에게 반환합니다.

관련 문제