2011-05-20 136 views
3

我一直想知道如何創建像jQuery這樣的函數。例如:$(ID).function()jQuery像自定義函數

其中,ID是HTML元素的ID,$是返回元素「ID」的document.getElementById引用並且函數是自定義JavaScript函數的函數。

我正在創建一個實現一些功能的小型庫。而且我想在不使用jQuery的情況下使用sintax。

現在,我的問題是:我該如何實現?這種技術的名稱是什麼?

編輯:

我想要做的是這樣的:

HTMLElement.prototype.alertMe =函數(){警報(THIS.VALUE);}

然後,當我撥打document.getElementById('html_input_id').alertMe()時,它必須顯示一個帶有輸入值的警報箱。但是HTMLElement.prototype在IE中不起作用。

+0

object.prototype – 2011-05-20 13:13:34

+4

爲什麼不能獲取jQuery源碼並查看它? – Pointy 2011-05-20 13:15:28

+0

是的,但我不想創建一個插件。我根本不會使用jQuery。 – 2011-05-20 13:18:55

回答

1
$ = function(id) { 
    return document.getElementById(id); 
} 
0

您可以使用prototype來爲Element原型分配一個新函數。

Element.prototype.testFunction = function(str){alert(str)};

這將爲所有HTML元素提供函數'testFunction'。

你可以擴展任何基礎對象這種方式,即數組,字符串等

這將不帶任何插件,在所有的工作 - 雖然那說,我不認爲它會在IE瀏覽器。我相信像MooTools和jQquery這樣的庫使用DOM元素創建自己的繼承來確保跨瀏覽器的兼容性,但不要在此引用我的意思。

1

好的,看,你問的有很多細節和含義。 jQuery的代碼是開源的,你可以閱讀它的細節;你最好還是找一本好的Javascript書,O'Reilly權威指南。

$只是在JS名稱的字符,所以一些其他的答案都顯示,沒有任何理由,你不能只是寫有該名稱的功能:

var $ = function(args){...} 

既然每個人都和他兄弟使用這個技巧,你想要一個更長的名字,所以你可以混合的東西。

var EstebansLibrary = function(args){...} 
var $ = EstebansLibrary; // make an alias 

因爲你最終的入口點函數做不同的事情,你需要知道JS如何使用參數 - 仰望arguments對象。

你會打包這個,這樣你的內部不會污染命名空間;你會希望module pattern的一些變種,這將使它像

var EstebansLibrary = (function(){ 
    // process the arguments object 
    // do stuff 
    return { 
     opname : implementation,... 
    } 
})(); 

的東西,最終你還是會希望繼承做好準備,這意味着把這些功能整合到prototype對象。

+0

謝謝查理,我會考慮這些提示。 – 2011-05-20 14:50:50