我不想创建一个JQUERY PLUGIN
让我说我有这样的事情:
// In folib.js
function Foo() {this.Prop = function() {//do something}};
所以我的用户可以引用我的JavaScript库并整天实例化我的对象
// In consumer
foo = new Foo();
alert(foo.Prop);
现在,我想为我的类创建一个类似JQuery的插件系统,而我可以创建扩展Foo()的插件脚本库。
我想我应该这样做......
(function( foo ){
foo.myPlugin = function() {
// Do your awesome plugin stuff here
};
})(Foo);
但我无法做到这一点。有关如何在JQuery中完成此操作的任何想法?我无法弄明白:(
答案 0 :(得分:5)
使用prototype
:
Foo.prototype.myPlugin = function () { /* Do plugin stuff */ };
然后您就可以像这样访问插件:
var foo = new Foo();
alert(foo.myPlugin);
原型与new
结合使用时起作用:新对象(foo
)有一个隐藏指向它所构造函数的prototype
对象的指针({{1} })。如果在新对象上找不到属性,JS将在原型中搜索它。有关详细信息,请阅读this。
jQuery通过提供指向Foo
的{{1}}属性来做类似的事情:
fn
答案 1 :(得分:3)
要了解Box9的最佳答案,您还应该返回执行操作的对象。
Foo.prototype.myPlugin = function () {
/* Do plugin stuff */
return this; //return the object's instance
};
这将使您能够链接修改同一对象的函数。这是使jQuery如此受欢迎的一部分 - 它使用了一个流畅的界面,在链接函数和插件时允许更具表现力的语法。 http://en.wikipedia.org/wiki/Fluent_interface
这可能不是你要求的,但在创建扩展对象的许多函数时它特别有用。
myFooInstance.DoSomething(5).DoAnotherThing('hello').YetAnother();
答案 2 :(得分:1)