jQuery喜欢自定义函数

时间:2011-05-20 13:11:10

标签: javascript

我一直想知道如何创建像jQuery这样的函数。例如:$(ID).function()

其中ID是HTML元素的id,$是一个函数,它返回元素“ID”的document.getElementById引用,函数是一个自定义的javascript函数。

我正在创建一个实现某些功能的小库。我想在不使用jQuery的情况下使用那个sintax。

现在,我的问题是:我如何实现这一点? tecnique允许的名称是什么?

编辑:

我想做的是:

  

HTMLElement.prototype.alertMe = function(){alert(this.value);}

然后,当我呼叫document.getElementById('html_input_id').alertMe()时,它必须显示带有输入值的警告框。但是HTMLElement.prototype在IE中不起作用。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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对象。

答案 2 :(得分:0)

您可以使用原型为Element原型分配新功能。

  

Element.prototype.testFunction =函数(STR){警报(STR)};

这将为所有HTML元素提供函数'testFunction'。

您可以通过这种方式扩展任何基础对象,即Array,String等。

这可以在没有任何插件的情况下工作 - 虽然这表示我认为它不适用于IE。我相信像MooTools和jQquery这样的库使用DOM元素创建自己的继承,以确保跨浏览器兼容性,尽管不引用我的。