2011-04-04 23 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