2011-04-04 21 views
1

我不想创建一个jQuery插件创建JQuery的像自定义插件结构的javascript

比方说,我有这样的事情:

// 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中完成的想法?连同new使用时

var foo = new Foo(); 
alert(foo.myPlugin); 

原型的工作:我不能弄明白:(

+0

OK,跟着我在这里......我想我需要做类似函数foo(){this.fn =功能(脚本){this.prototype.script;}}; – farina 2011-04-05 00:11:00

回答

5

使用prototype

Foo.prototype.myPlugin = function() { /* Do plugin stuff */ }; 

然后,你将能够访问该插件,像这样:新对象(foo)有一个隐藏的指针,指向它的构造函数prototypeFoo)。如果在新对象上找不到属性,JS将在专业版中搜索它输入。欲了解更多信息,请阅读this

jQuery不会类似的事情通过向prototype提供fn属性指向:

Foo.fn = Foo.prototype; 
+0

这很完美!到底我在找什么......谢谢! – farina 2011-04-06 17:16:30

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(); 
+0

更好!谢谢! – farina 2011-04-06 17:17:21