2014-12-16 4 views
1

JQuery가 "$"를 새 인스턴스와 인스턴스 자체를 반환하는 함수로 어떻게 사용하는지 궁금합니다. 정확하지는 않겠지 만, $(element).method을 사용할 수 있으며 예 : $.ajax은 대괄호없이 사용할 수 있습니다 (.ajax는 여전히 방법입니다).변수와 함수 인스턴스와 객체 인스턴스를 모두 사용

편집 : 나는 잘못 생각합니다. JavaScript에서 객체가 작동하는 방식을 알고 있으며 제 질문은 그것에 관한 것이 아닙니다. JQuery를 사용하면 new이라는 키워드없이 $을 사용할 수 있습니다. 자동으로 새 인스턴스를 반환하는 함수가 있습니다. 그래서 내 질문은 새로운 개체와 개체 자체를 instanciate하는 함수로 모두 $을 사용할 수있는 방법에 관한 것이 었습니다. 있다고 가정 해 보겠습니다.

(function() { 

var jQ = function (arg){ 

    this.own = arg; 

}; 

jQ.prototype = { 

    foo : function(){ 

     alert("Foo"); 

    }, 

    bar : function(){ 

     alert("Bar"); 

    } 

}; 

window.jQ = window.$ = jQ; 

return jQ; 

}()); 이 예에서는 내 개체를 사용하려면 키워드 new을 사용해야합니다. JQuery가이 단계를 피하기 위해 어떻게해야합니까?

+2

당신은'prototype' 자바 스크립트에서 무엇을 의미하는지 알아? – undefined

+3

함수는 객체이므로이를 그대로 사용할 수 있습니다. –

답변

1

jQuery가 아닙니다. JavaScript 함수에는 객체가 있습니다.

0

를 호출 할 수 있습니다 매개 변수 element을 jQuery 함수에 넣습니다. $.ajax 호출을 사용하면 $ jQuery 객체 내부에서 ajax 함수를 호출합니다. 두 경우 모두 동일한 코드에 대해 이야기하고 있지만 두 가지 다른 방식으로 사용하고 있습니다.

jQuery의 원시 코드를 살펴보면 약간 시각화하는 데 도움이됩니다. https://code.jquery.com/jquery-2.1.1.js 참고 : 반복적으로 사용되는 jQuery 함수는 페이지 아래쪽에 별칭이 지정됩니다.

0

JavaScript에서는 함수가 객체라는 것을 기억하십시오. 그래서, 당신은 당신의 질문에서 호출 된 특정 기능을 사용하여,이처럼 그들을 만들 수 있습니다

var $ = function(selector) { 
    ... 
}; 

$.ajax = function(url) { 
    ... 
}; 

편집 : 당신의 편집/명확히 질문에 응답하려면 생성자 함수를 만들기 위해 프로토 타입을 사용할 필요가 없습니다 자바 스크립트.

(function() { 

var jQ = function (arg){ 

    return { 
     own: arg, 
     foo: function(){ 
       alert("Foo"); 
      }, 
     bar: function(){ 
       alert("Bar"); 
      } 
    } 

}; 

window.jQ = window.$ = jQ; 

return jQ; 
}()); 

나는이 스타일이 실제로 더글러스 크록 포드 선호 믿습니다 : 여기 프로토 타입 코드의 상당하지만 객체를 인스턴스화하는 new 연산자를 사용하지 않고 - 모든 생성자가 객체를 반환하고있다 기억 새 키워드를 사용하는 것을 잊어 버리지도 오류는 발생하지 않지만 예상치 못한 동작이 발생할 수 있습니다.

0

JQuery를 사용하면 new라는 키워드없이 $를 사용할 수 있습니다. 자동으로 새 인스턴스를 반환하는 함수가 있습니다.

여기 엔 불가사의가 없습니다.

// Define a local copy of jQuery 
jQuery = function(selector, context) { 
    // The jQuery object is actually just the init constructor 'enhanced' 
    // Need init if jQuery is called (just allow error to be thrown if not included) 
    return new jQuery.fn.init(selector, context); 
}, 

(안 예에서와 같이) 코드에서 일어나고있는 유일한 마법 jQuery.fn.init.prototype = jQuery.prototype 있음을 경우 : jQuery 기능은 단순히 또 다른 생성자의 인스턴스 (source)를 반환합니다. 그러나 jQuery.fn.init is a different function than jQuery.


당신의 예에 적용 :

var jQ = function (arg){ 
    return new jQ.prototype.init(arg); 
}; 

jQ.prototype = { 

    init: function(arg) { 
     this.own = arg; 
    }, 

    // ... 

}; 

jQ.prototype.init.prototype = jQ.prototype; 
+0

나는 그것을 이미 보았고'.fn'은 단지'.prototype'이라는 것을 알고 있습니다. 그렇다면 위의 예에서 우리는 어떻게 같은 행동을 할 수 있습니까? – user3292788

+0

내 업데이트보기 ... –

+0

'$'를 사용하여 업데이트로'foo' 메소드를 호출 해보십시오. 이미 값이있는 속성을 추가하고'$ .property'를 사용하여 표시하십시오. – user3292788

관련 문제