有没有人可以用javascript写一个非常简单的基本例子来概念化(希望能让我理解) jQuery插件设计模式是如何完成的,以及它是如何工作的?
我对如何为jQuery创建插件不感兴趣(所以这里根本没有jQuery代码)。我感兴趣的是一个简单的解释(也许用一点Javascript代码)来解释它是如何通过插件概念来完成的。
请不要回复我去读jQuery代码,我试过了,但是它太复杂了,否则我不会在这里发问的。
谢谢!
发布于 2010-05-20 19:51:51
jQuery有一个名为fn
的内部对象中存储的函数库。您可以在每个jQuery对象上调用这些函数。
当您执行$("div.someClass")
时,您将获得一个包含该类的所有<div>
元素的jQuery对象。现在,您可以执行$("div.someClass").each( someFunction )
将someFunction
应用到它们中的每一个。这意味着,each()
是存储在fn
中的函数之一(在本例中是一个内置函数)。
如果您扩展(添加到)内部fn
对象,则会自动使您的自定义函数以相同的语法可用。假设您有一个名为log()
的函数,用于将所有元素记录到控制台。您可以将此函数附加到$.fn
,然后将其用作$("div.someClass").log()
。
附加到fn
对象的每个函数都将以这样的方式调用:在函数体中,this
关键字将指向您使用的jQuery对象。
通常的做法是在自定义函数的末尾返回this
,这样方法链接就不会中断:$("div.someClass").log().each( someFunction )
。
有几种方法可以将函数附加到$.fn
对象,其中一些方法比其他方法更安全。一个非常安全的做法是:
jQuery.fn.extend({
foo: function() {
this.each( function() { console.log(this.tagName); } );
return this;
}
})
发布于 2010-05-20 19:58:46
Tomalak已经发布了几乎所有你需要知道的内容。
还有最后一件事可以帮助jQuery使用this关键字完成此任务。
它的方法名为apply()
var somefunction=function(){
alert(this.text);
}
var anObject={text:"hello"};
somefunction.apply(anObject);
//alert "hello" will happen
它确实有助于创建抽象,这样框架/插件用户就可以像直觉告诉他们的那样使用这个,无论代码中有什么
发布于 2010-05-20 19:46:31
它和许多其他js框架一样,使用javascript原型导向。
例如,您可以声明一个简单的函数
var alertHelloWorld = function() {
alert('hello world');
}
然后将其绑定到现有对象(包括DOM节点)
document.doMyAlert = alertHelloWorld;
如果你这样做
document.doMyAlert();
将执行alertHelloWorld函数
您可以阅读有关javascript对象原型here的更多信息
https://stackoverflow.com/questions/2873257
复制相似问题