我正在创建一个小代码插件,它允许你用数组做一些事情。我不希望将功能添加到使用原型建造的数组对象,我要的是,人们可以这样做:
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