您可以通过返回一个包含所有必需方法的特殊对象来执行类似的操作,但可以使用它来代替最终值。例如,您可以返回一个Array
包含所有这些方法的实例。
var getstuff = function () {
obj = Array.apply(this, arguments);
obj.take = function (n) {
return this[n];
};
obj.grep = function (regexp) {
return getstuff.apply(this, Array.prototype.filter.apply(this, [function (item) {
return item.toString().search(regexp) !== -1;
}]));
};
obj.splice = function () {
return getstuff.apply(this, Array.prototype.splice.apply(this, arguments));
}
return obj;
}
// shows [-8, 1]
console.log(getstuff(3, 1, 2, 'b', -8).sort().grep(/\d+/).splice(0, 2));
// shows 3
var stuff = getstuff(3, 1, 2, 'b', -8).grep(/\d+/);
console.log(stuff.sort()[stuff.length]);
请注意,上面的实现并不是特别快,但它通过仍然保持 globalAllay
的原型干净而返回具有特殊方法的数组,因此不会干扰其他代码。
您可以通过在 上定义这些特殊方法来使其更快Array.prototype
,但您应该小心...
或者,如果您的浏览器支持子类Array
化,那么您所需要的只是一个子类和一个方便的构造函数,getstuff()
.