我正在創建一個小代碼插件,它允許你用數組做一些事情。我不希望將功能添加到使用原型建造的數組對象,我要的是,人們可以這樣做:
arrayFunction([1, 2, 3]).someSpecialArrayFunction();
因此離開正常的數組對象不變。
於是我想出了下面的結構(這是啓發了jQuery源代碼):
var arrayFunction = window.arrayFunction = function(array) {
return new arrayFunction.fn.init(array);
}
arrayFunction.fn = arrayFunction.prototype = {
init: function(array){
this.a = array;
//should I return something here?
},
someSpecialArrayFunction: function(){
//Super cool custom stuff here.
}
}
然而,這並不工作(明顯)。 init函數()中應該發生什麼?
錯誤現在的問題是,當我嘗試:
arrayFunction(array).someSpecialArrayFunction();
它說,someSpecialArrayFunction()不是一個功能?
應該怎麼做?
編輯
是的,這確實是一個簡單的例子。實際的東西有更多的方法。
另外,我只是雖然它會是多麼令人敬畏,如果它也支持chaning,你會怎麼做?
jquery的$實際上是一個對象。 – Malfist 2009-01-08 17:57:24
在Javascript中,所有函數都是對象 - 您實際上是使用function關鍵字聲明對象的,因此jQuery $既是對象又是函數,它返回該對象的實例。這可能需要一些習慣... – 2009-01-08 18:21:55
你在這裏尋找一種方法來創建你的示例*工作* - 或者通過將方法添加到包裝器的原型中來將方法附加到包裝器對象的一般模式。所以你可以管理大量的擴展方法集合? – 2009-01-08 18:47:18