Вы можете сделать что-то подобное, вернув специальный объект, в котором есть все необходимые методы, но который можно использовать вместо конечного значения.Например, вы можете вернуть экземпляр 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]);
Обратите внимание, что приведенное выше не очень быстрая реализация, но он возвращает массивы специальными методами, сохраняя при этомПрототип global Allay
чист, поэтому он не будет мешать другому коду.
Вы можете сделать это быстрее, определив эти специальные методы на Array.prototype
, но вы должны быть осторожны с этим ...
Или, если ваш браузер поддерживает подклассы Array
, то все, что вам нужно, это надкласс и удобный конструктор, getstuff()
.