Немного поизвращался со сжатием методов коллекции. Так как все что надо сделать - запустить метод для всех своих элементов я сделал некрасиво но ужато. Мне в Ts это ника не помешает, так как есть интерфейс, но что-то я засомневался в необходимсти такой экономии места. Зато ужатый весит 3кб (целиком, а не тольк этот кусочек)
/**
* @class Collection
* @extends Array
* @param {Array} arr
* @constructor
*/
var Collection = function (arr) {
arr.forEach(function (elem) {
this.push(elem);
}, this);
};
(function (Collection, extend, methods) {
Collection.prototype = extend;
Collection.prototype.constructor = Collection;
var collectionActionsList = ["remove", "click", "change", "hover", "on", "addClass", "removeClass", "toggleClass", "show", "hide"];
for (var methodName in methods) {
if (methods.hasOwnProperty(methodName)) {
Collection.prototype[methodName] = methods[methodName];
}
}
collectionActionsList.forEach(function (collectionMethodName) {
this.prototype[collectionMethodName] = function () {
return this._do(collectionMethodName, arguments);
}
}, Collection);
})(Collection, [], {
/**
* @return {Lite}
*/
last: function () {
return this[this.length - 1];
},
/**
* @return {Lite}
*/
first: function () {
return this[0];
},
/**
* @param {String} method
* @param {Array} [args]
* @return {Collection}
* @private
*/
_do: function (method, args) {
this.forEach(function ($elem) {
$elem[method].apply($elem, args);
});
return this;
},
/**
* @param mapHandler
* @return {Collection}
*/
map: function (mapHandler) {
return new Collection(Array.prototype.map.call(this, mapHandler));
},
/**
* @param filterHandler
* @return {Collection}
*/
filter: function (filterHandler) {
return new Collection(Array.prototype.filter.call(this, filterHandler));
}
});