2013-06-20 47 views
1

是否可以覆蓋縮小的Javascript文件中包含的函數?是否有可能覆蓋縮小的JavaScript函數

Details: 我試圖重寫Twitter Boootstrap Typeahead插件(v2.3.2)中的process()函數,以便在下拉菜單的底部添加一個指標,如果返回的項目超過顯示的項目。

這裏是我的代碼:

var customProcess = function (items) { 
    var that = this 

    items = $.grep(items, function (item) { 
     return that.matcher(item) 
    }) 

    items = this.sorter(items) 

    if (!items.length) { 
     return this.shown ? this.hide() : this 
    } 

    //Get the default item slice and determine whether the indicator is needed 
    var itemSlice = items.slice(0, this.options.items); 
    if (items.length > this.options.items) { 
     itemSlice.push("..."); 
    } 

    return this.render(itemSlice).show(); 
}; 

// Reassign the typeahead.process() function to the customized 
// version that adds a visual indicator if more items are 
// returned than the amount shown (options.items). 
$.fn.typeahead.Constructor.prototype.process = customProcess; 

如果我使用的是JavaScript的自舉(bootstrap.min.js)的縮小的版本失敗,實際上完全殺死了預輸入功能。如果我改用非縮小版本(bootstrap.js),它可以很好地工作。 [作爲一個方面說明,我之前對typeahead插件的舊版本(v1.8.x我相信)使用了相同的方法,並且它與最小化版本完美配合。我剛運氣好嗎?]

+0

嘗試使用縮小像http://jscompress.com/縮小非縮小版本(適用於您),並檢查是否有效。 –

+0

@ParthikGosar [jscompress.com](http://www.jscompress.com)無法正常工作,但我在[refresh-sf.com/yui](http://refresh-sf.com/yui/)找到了另一個)。使用新縮小文件,覆蓋成功。至於我最初的問題,只要縮小的JS是正確的,似乎壓倒性的縮小JS是完全有效的。我對嗎?謝謝你的幫助! – catalyst156

+0

是的,你是正確的...在縮小JS文件時常見的錯誤之一是我們錯過了在我們的代碼中添加分號的時候。所以當文件被縮小時,連續的行被計算爲同一行(因爲這些行之間沒有分號)。必要時一些縮小器會添加分號,有些則不會。這種情況會在縮小的文件中引入錯誤。 –

回答

1

縮小並不會更改「可見」API。如果您可以在縮小的庫上調用函數library.functionName(...),那麼您可以重寫該屬性並將其轉換爲其他屬性(請注意,函數只是一個使用執行操作符()添加到的屬性它)。

有一點需要注意:如果該功能是從被修改設置使用Object.defineProperty,與任一默認configurable和/或writable配置選項(或這些值顯式設置爲false),那麼它會被「鎖定」(它將不可刪除和/或分配)。

+0

@Kamerman感謝您花時間提供答案。我的問題之前已解決,但您的回答與問題相匹配,因此我會繼續並接受它爲正確的。 – catalyst156

相關問題