167 lines
4.4 KiB
JavaScript
167 lines
4.4 KiB
JavaScript
var arrayProperties = {}
|
|
var liveCollectionProperties = {}
|
|
var functionProperties = {}
|
|
var objectProperties = {}
|
|
var slice = Array.prototype.slice
|
|
|
|
arrayProperties.cl_each = function (cb) {
|
|
var i = 0
|
|
var length = this.length
|
|
for (; i < length; i++) {
|
|
cb(this[i], i, this)
|
|
}
|
|
}
|
|
|
|
arrayProperties.cl_map = function (cb) {
|
|
var i = 0
|
|
var length = this.length
|
|
var result = Array(length)
|
|
for (; i < length; i++) {
|
|
result[i] = cb(this[i], i, this)
|
|
}
|
|
return result
|
|
}
|
|
|
|
arrayProperties.cl_reduce = function (cb, memo) {
|
|
var i = 0
|
|
var length = this.length
|
|
for (; i < length; i++) {
|
|
memo = cb(memo, this[i], i, this)
|
|
}
|
|
return memo
|
|
}
|
|
|
|
arrayProperties.cl_some = function (cb) {
|
|
var i = 0
|
|
var length = this.length
|
|
for (; i < length; i++) {
|
|
if (cb(this[i], i, this)) {
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
|
|
arrayProperties.cl_filter = function (cb) {
|
|
var i = 0
|
|
var length = this.length
|
|
var result = []
|
|
for (; i < length; i++) {
|
|
cb(this[i], i, this) && result.push(this[i])
|
|
}
|
|
return result
|
|
}
|
|
|
|
liveCollectionProperties.cl_each = function (cb) {
|
|
slice.call(this).cl_each(cb)
|
|
}
|
|
|
|
liveCollectionProperties.cl_map = function (cb) {
|
|
return slice.call(this).cl_map(cb)
|
|
}
|
|
|
|
liveCollectionProperties.cl_reduce = function (cb, memo) {
|
|
return slice.call(this).cl_reduce(cb, memo)
|
|
}
|
|
|
|
functionProperties.cl_bind = function (context) {
|
|
var self = this
|
|
var args = slice.call(arguments, 1)
|
|
context = context || null
|
|
return args.length
|
|
? function () {
|
|
return arguments.length
|
|
? self.apply(context, args.concat(slice.call(arguments)))
|
|
: self.apply(context, args)
|
|
}
|
|
: function () {
|
|
return arguments.length
|
|
? self.apply(context, arguments)
|
|
: self.call(context)
|
|
}
|
|
}
|
|
|
|
objectProperties.cl_each = function (cb) {
|
|
var i = 0
|
|
var keys = Object.keys(this)
|
|
var length = keys.length
|
|
for (; i < length; i++) {
|
|
cb(this[keys[i]], keys[i], this)
|
|
}
|
|
}
|
|
|
|
objectProperties.cl_map = function (cb) {
|
|
var i = 0
|
|
var keys = Object.keys(this)
|
|
var length = keys.length
|
|
var result = Array(length)
|
|
for (; i < length; i++) {
|
|
result[i] = cb(this[keys[i]], keys[i], this)
|
|
}
|
|
return result
|
|
}
|
|
|
|
objectProperties.cl_reduce = function (cb, memo) {
|
|
var i = 0
|
|
var keys = Object.keys(this)
|
|
var length = keys.length
|
|
for (; i < length; i++) {
|
|
memo = cb(memo, this[keys[i]], keys[i], this)
|
|
}
|
|
return memo
|
|
}
|
|
|
|
objectProperties.cl_some = function (cb) {
|
|
var i = 0
|
|
var keys = Object.keys(this)
|
|
var length = keys.length
|
|
for (; i < length; i++) {
|
|
if (cb(this[keys[i]], keys[i], this)) {
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
|
|
objectProperties.cl_extend = function (obj) {
|
|
if (obj) {
|
|
var i = 0
|
|
var keys = Object.keys(obj)
|
|
var length = keys.length
|
|
for (; i < length; i++) {
|
|
this[keys[i]] = obj[keys[i]]
|
|
}
|
|
}
|
|
return this
|
|
}
|
|
|
|
function build(properties) {
|
|
return objectProperties.cl_reduce.call(properties, function (memo, value, key) {
|
|
memo[key] = {
|
|
value: value
|
|
}
|
|
return memo
|
|
}, {})
|
|
}
|
|
|
|
arrayProperties = build(arrayProperties)
|
|
liveCollectionProperties = build(liveCollectionProperties)
|
|
functionProperties = build(functionProperties)
|
|
objectProperties = build(objectProperties)
|
|
|
|
/* eslint-disable no-extend-native */
|
|
Object.defineProperties(Array.prototype, arrayProperties)
|
|
Object.defineProperties(Int8Array.prototype, arrayProperties)
|
|
Object.defineProperties(Uint8Array.prototype, arrayProperties)
|
|
Object.defineProperties(Uint8ClampedArray.prototype, arrayProperties)
|
|
Object.defineProperties(Int16Array.prototype, arrayProperties)
|
|
Object.defineProperties(Uint16Array.prototype, arrayProperties)
|
|
Object.defineProperties(Int32Array.prototype, arrayProperties)
|
|
Object.defineProperties(Uint32Array.prototype, arrayProperties)
|
|
Object.defineProperties(Float32Array.prototype, arrayProperties)
|
|
Object.defineProperties(Float64Array.prototype, arrayProperties)
|
|
Object.defineProperties(Function.prototype, functionProperties)
|
|
Object.defineProperties(Object.prototype, objectProperties)
|
|
if (typeof window !== 'undefined') {
|
|
Object.defineProperties(HTMLCollection.prototype, liveCollectionProperties)
|
|
Object.defineProperties(NodeList.prototype, liveCollectionProperties)
|
|
}
|