2012-04-01 34 views
1

我可以重載$()函數嗎?
我想實現這樣的模式$('$ name'),其中字符串以'$'開頭,然後返回我定義的結果。例如:

function getElementByVarName(varName) { 
    //return something of my own 
} 

var original$=$; 
$=function(param) { 
    if (typeof param === 'string' && param.startsWith('$')) { 
     return getElementByVarName(param.substring(1)); 
    } else { 
     original$(param); 
    } 
} 

這樣做的最佳方式是什麼?

回答

0

您可以使用noConflict()

var j = $.noConflict(); 
(function($) { 
    $(function() { 
    //here your new function codes 

}); 
})(jQuery); 

而且原單$現在j功能

這裏DEMO

+0

如何...你把任何exapmle?我想要原始的行爲存在 - 我只需要覆蓋$的情況。 – Naor 2012-04-01 11:31:34

+0

我需要編寫一個插件或方法。我仍然不明白如何使用noConflict來編寫一些通用的東西。 – Naor 2012-04-01 11:35:18

+0

已更新的代碼,請檢查 – safarov 2012-04-01 11:48:34

0

你已經勾勒出什麼應該工作正常哉!

編輯:你要適應傳遞給原有的功能各種爭論,這樣做:

original$.apply(original$, arguments) 
+0

但我認爲有許多選項,$可以得到..我相信有一個更好的方式來寫它。 – Naor 2012-04-01 11:33:52

+0

這樣的方式$將鬆散所有的成員,如FN,擴展和其他方法。此外,在$(function(){})模式中,原始$用於。 – Naor 2012-04-01 12:25:02