2014-02-28 20 views
1

我想重載一個插件的方法。如何在JS中重新定義對象方法?

這是我使用的插件。 http://www.owlgraphic.com/owlcarousel/owl-carousel/owl.carousel.js

該庫包含以下方法:

updateControls : function() { 
      var base = this; 
      base.updatePagination(); 
      base.checkNavigation(); 
      if (base.owlControls) { 
       if (base.options.items >= base.itemsAmount) { 
        base.owlControls.hide(); 
       } else { 
        base.owlControls.show(); 
       } 
      } 
     }, 

這是我的方法重載腳本:

jQuery(document).ready(function($){ 
      $.fn.owlCarousel = $.extend($.fn.owlCarousel, { 
       updateControls:function() 
       { 
        console.log("!!"); 
        var base = this; 
        base.updatePagination(); 
        base.checkNavigation(); 
        if (base.owlControls) { 
         base.owlControls.show(); 
         base.owlControls.show(); 
        } 
       } 
      }); 
     }) 

console.log("!!");不會出現被稱爲 - 我究竟做錯了什麼?

回答

1

在這種情況下,看起來​​的初始值設定項不接受選項來覆蓋內部函數updateControls。您可能需要修改庫以接受(並使用)updateControls函數的覆蓋。

這種編輯的一個例子是修改庫中的init函數,儘管我建議使用options對象來覆蓋該函數。

var Carousel = { 
    init : function (options, el) { 
     var base = this; 

     base.$elem = $(el); 
     base.options = $.extend({}, $.fn.owlCarousel.options, base.$elem.data(), options); 

     base.userOptions = options; 

     // check for override in options of updateControls function 
     if (typeof base.userOptions.updateControls == "function") base.updateControls = base.userOptions.updateControls; 

     base.loadContent(); 
    } 

此修改init功能將允許你指定updateControls功能,爲您的第二個代碼示例中所做的那樣。