2012-09-27 12 views
1

jQuery에서 기존 객체 메소드를 확장하려면 어떻게해야합니까?jQuery의 기존 확장 함수에 메소드를 추가하려면 어떻게해야합니까?

예를 들어 jqBarGraph을 사용하고 있습니다. 이제 addGrid() 함수를 추가하고 싶습니다. 나는 그렇게처럼 할 거라고 생각했다 :

(function($) { 
    $.fn.jqBarGraph.addGrid = function(){ 
    var o = this; 
    // do something with 'o' 
    return o; 
    } 
})(jQuery); 

을 ...하지만 난 $('#chart').jqBarGraph(options).addGrid();를 호출 할 때 - 나는 오류 얻을 :

Uncaught TypeError: Cannot call method 'addGrid' of undefined

+0

당신이 – SpYk3HH

답변

6

당신은 속성을 추가 할을 함수에 전달하면 실제로 액세스 할 수 있습니다.

$('#chart').jqBarGraph.addGrid(); 

원하는 내용이 아닙니다. jqBarGraph이 호출되면 아무 것도 반환하지 않는 것 같습니다. 이 같은 기능을 직접 패치해야 할 것 : 개발자에게보고

(function(old) { 
    $.fn.jqBarGraph = function() { 
    old.apply(this, arguments); // call the actual function 

    // return something 
    return { 
     addGraph: function() { ... } 
    }; 
    }; 

    $.fn.jqBarGraph.defaults = old.defaults; // restore properties 
})($.fn.jqBarGraph); 
+0

감사 플러그인 및 일반 스크립트 전에 호출 후에 추가 확인, 나뿐만 아니라 GitHub의에 뛰어 것이다 그 그는 아마도 자신의 기능으로 "이"를 되돌려 주어야합니다. – Volomike

+0

@Volomike : 네, 그렇습니다. 그것은 여기에 해결책을 바꾸지 않을 것이다. – pimvdb

+0

이 코드를 구현했습니다. 정말 멋졌습니다! addGraph() 함수의 "this"는 다른 "this"입니다. 대신에, old.apply() 문 앞에 'var oThis = this;'를 수행 한 다음 addGraph() 함수 안에서 참조해야합니다. – Volomike

관련 문제