在自定义javascript中创建类似插件结构的JQuery

时间:2011-04-04 23:53:23

标签: javascript

我不想创建一个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中完成此操作的任何想法?我无法弄明白:(

3 个答案:

答案 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)