2011-01-29 4 views
2

아직 jQuery를 배우고 있지만 jQuery를 많이 사용할수록 객체 지향보다는 절차 적으로 보인다. 예를 들어, 내부적으로 사용되는 클래스가 있지만 jQuery 클래스를 보거나 사용했다고 생각하지 않습니다. 내가하는 일은 직접 개체를 만드는 대신 메서드 체인입니다. 예 : 새 Foo(). 또한 jQuery documentation for plug-in development에는 클래스가 언급되지 않았습니다.jQuery는 절차적인가요?

jQuery는 jQuery 기반 라이브러리를 작성할 때 jQuery가 함수와 메소드 만 노출하고 내부 클래스를 내부에 유지하도록 권장하는 바가 적절합니까? jQuery 플러그인을 작성하는 것이 아니라 각 애플리케이션마다 고유 한 맞춤형 라이브러리를 작성하는 것입니다.

저는 Java에서 왔기 때문에 여기에서 혼란스러워합니다.

+0

(1) JS에 수업이 없습니다. (2) 객체를 사용하지 않고 * 메소드 *를 어떻게 연결할 수 있습니까? ;) 그들의 구조가 'new'라는 문자를 포함하지 않기 때문에 객체를 생성하거나 사용하지 않는다는 것을 의미하지는 않습니다. – delnan

+0

jQuery는 OO보다 * 좋은 방법입니다! –

답변

5

jQuery는 주로 DOM API에 대한 계층이며 반복 및 열거를위한 each()과 같은 몇 가지 편리한 메소드가 결합되어 있습니다. DOM API에서 clunkiness로 여겨 질 수있는 부분과 구현 전반에서 일관성이없는 부분을 부드럽게 처리합니다.

프레임 워크가 아니며 언어가 아닙니다. DOM API가 제공하는 것보다 더 나은 환경을 제공하는 것만으로도 충분합니다.

자바 스크립트에서 볼 수있는 OOP 기능을 사용하지만 그 자체로 특별한 프로그래밍 패러다임을 제공하지 않습니다. 해당 지역에보다 초점을 맞춘 prototypejsunderscore과 같은 다른 라이브러리가 있습니다.

+2

jQuery는 프레임 워크가 아니라 라이브러리입니다. 밑줄 & 프로토 타입에 대한 링크를 추가하십시오. – Raynos

+0

@ 레이 노스 : 도움을 주셔서 감사합니다. : o) – user113716

+0

코멘트를 남긴 직후에 편집 할 수있는 충분한 담당자가 있습니다. o) – Raynos

5

jQuery는 더 많은 OO 다음 절차 적입니다.

$(domNode)은 새 jQuery 객체를 반환합니다. 소스를 살펴보면 jQuery 메서드는 new 객체를 반환합니다.

$(domNode).foo은 jQuery 객체에 대한 메소드를 호출합니다.

class 키워드가 없다는 사실에 혼란스러워합니다.

function Constructor() { 
    this.constructed = true; 
} 

var o = new Constructor; 
alert(o.constructed); 

new 키워드가 사용되는 한 함수는 개체 생성자로 사용됩니다. Java와 JavaScript OO에는 매우 큰 차이가 있습니다. JavaScript는 클래스 기반의 상속이 아닌 프로토 타입 상속을 사용합니다.

jQuery의 체인은 그림 here과 같이 수행됩니다. jQuery 객체에서 호출되는 모든 메소드는 jQuery 객체를 반환합니다.

$(obj).css("foo").attr("bar"); // we can call both methods on $(obj) 

var o = $(obj).css("foo"); // .css returns $(obj) 
alert(o[0] === $(obj)[0]); // o & $(obj) point to the same DOM node 
o.attr("bar"); 
+0

이것은 내가 질문에서 해석 한 약간 다른 견해를 취한다. (내 말이 옳다고 말하지 않는다.) jQuery가 어떻게 활용되는지와 달리 jQuery가 어떻게 구현되는지에 대한 통찰력을 얻기 위해 +1. – user113716

+0

@patrickdw jQuery 소스가 절차 적 스타일로 작성되었다고 말하고 있다고 생각했습니다. – Raynos

+0

+1 어떻게 할 수 없습니까? :) – GolezTrol

2

jQuery가 언어가 아니기 때문에 설명서에 Class 또는 이와 같은 내용이 언급되어 있지 않은 이유는 무엇입니까? Javascript로 작성된 API이며 Javascript는 Prototype programing language입니다.

+0

jQuery에 +1은 언어가 아닙니다. 또한 프로토 타입 언어는 여전히 객체 지향적입니다. – Raynos

+1

jQuery는 실제로 언어가 아닙니다. 사람들은 그 사실을 잊어 버리지 않습니다. :) 그러나, 그것은 * 언어로 작성되었으며 절차 적 또는 객체 지향 스타일로 작성되어 그 질문을 매우 타당하게 만들 수 있습니다. Tom은 jQuery가 언어 그 자체라고 주장하지 않았습니다. – GolezTrol

+0

@ Raynos 원인의 그것이 OO다고 나는 말하지 않았다. :) – mathk

1

귀찮아하는 jQuery가 아니라 JavaScript입니다. JavaScript는 프로토 타입 기반 언어이며 OO 스타일은 조금 다릅니다. 프로토 타입을 통해 사실 시뮬레이션 된 OO입니다 (자세한 내용은 여기를 참조하십시오. http://en.wikipedia.org/wiki/JavaScript#Prototype-based)

jQuery는 OO와 관련이 있습니다. $ 기능은 실제로 jQuery를 객체를 생성하는 팩토리 메소드입니다 - 당신이 자신 new Foo()

에게 $로 시작하는 물건을 작성하지 않는 이유가있다. 유틸리티 메소드와 비슷합니다. 예컨대 jQuery를에 맵핑 기능 (위키)

$.each([1,2,3], function(){ 
    document.write(this + 1); 
}); 
1

JQuery와 실제로 OO이다. 자바 스크립트의 클래스가 조금 다르기 때문에 클래스를 보지 못했을 수 있습니다.

// Yes, this function is actually a class constructor. 
function Demo(a) 
{ 
    // A property is declared easily and can be unset as well. 
    this.a = a; 
} 

// You can add functions to the prototype, but you can also 
// declare functions and assign them to this.functionName in the constructor. 
Demo.prototype.test = function() 
{ 
    alert(this.a); 
} 

d = new Demo('Hello world'); 
d.test(); 

그래서 단어를 '클래스'나 같은 '객체'또는 거기에 아무것도 결코, 아직도 내가 객체 지향 모델을 사용하고 있습니다 : 그들은 실제로 여분 조금과 기능입니다. 또한 '루스'함수는 실제로 모든 변수가 윈도우 객체의 속성이기 때문에 실제로는 윈도우 객체의 메서드입니다. 따라서 JavaScript는 그 사실을 숨기기는 매우 어렵지만 완전히 OO입니다. : D

+0

@GolezTroi 느슨한 함수는 창 개체의 속성입니다. – Raynos

+0

@ 레이 노스. 나는 실제로 여기에서 배우고있다. :) – GolezTrol