Wiele z nich korzysta z implementacji rezerwowych MDC (np. Dla indexOf ). Generalnie są rygorystycznie zgodne ze standardami, nawet w zakresie jawnego sprawdzania typów wszystkich argumentów.
Niestety, chociaż jest jasne, że autorzy uważają ten kod za trywialny i swobodnie używany, nie wydaje się, aby istniała wyraźna licencja na umieszczenie tego na piśmie. Wiki jako całość to CC Attribution-ShareAlike, jeśli jest to akceptowalna licencja (chociaż CC nie jest zaprojektowane dla kodu jako takiego).
js-Methods wygląda ogólnie OK, ale nie jest tak zgodne ze standardami na obrzeżach tego, jakie powinny być funkcje (np. niezdefiniowane elementy listy, funkcje, które mutują listę). Jest również pełen innych losowych, niestandardowych metod, w tym niektórych wątpliwych, takich jak podejrzane stripTags i niekompletny kodek UTF-8 (co jest również trochę niepotrzebne, biorąc pod uwagęunescape(encodeURIComponent)
sztuczkę).
Co jest warte, oto czego używam (które niniejszym udostępniam jako własność publiczną, jeśli w ogóle można powiedzieć, że podlega prawom autorskim). Jest nieco krótszy niż wersje MDC, ponieważ nie próbuje wykryć typu, że nie zrobiłeś czegoś głupiego, takiego jak przekazywanie wywołań zwrotnych niefunkcyjnych lub indeksów innych niż całkowite, ale poza tym stara się być zgodny ze standardami. (Daj mi znać, jeśli coś przegapiłem. ;-))
'use strict';
// Add ECMA262-5 method binding if not supported natively
//
if (!('bind' in Function.prototype)) {
Function.prototype.bind= function(owner) {
var that= this;
if (arguments.length<=1) {
return function() {
return that.apply(owner, arguments);
};
} else {
var args= Array.prototype.slice.call(arguments, 1);
return function() {
return that.apply(owner, arguments.length===0? args : args.concat(Array.prototype.slice.call(arguments)));
};
}
};
}
// Add ECMA262-5 string trim if not supported natively
//
if (!('trim' in String.prototype)) {
String.prototype.trim= function() {
return this.replace(/^\s+/, '').replace(/\s+$/, '');
};
}
// Add ECMA262-5 Array methods if not supported natively
//
if (!('indexOf' in Array.prototype)) {
Array.prototype.indexOf= function(find, i /*opt*/) {
if (i===undefined) i= 0;
if (i<0) i+= this.length;
if (i<0) i= 0;
for (var n= this.length; i<n; i++)
if (i in this && this[i]===find)
return i;
return -1;
};
}
if (!('lastIndexOf' in Array.prototype)) {
Array.prototype.lastIndexOf= function(find, i /*opt*/) {
if (i===undefined) i= this.length-1;
if (i<0) i+= this.length;
if (i>this.length-1) i= this.length-1;
for (i++; i-->0;) /* i++ because from-argument is sadly inclusive */
if (i in this && this[i]===find)
return i;
return -1;
};
}
if (!('forEach' in Array.prototype)) {
Array.prototype.forEach= function(action, that /*opt*/) {
for (var i= 0, n= this.length; i<n; i++)
if (i in this)
action.call(that, this[i], i, this);
};
}
if (!('map' in Array.prototype)) {
Array.prototype.map= function(mapper, that /*opt*/) {
var other= new Array(this.length);
for (var i= 0, n= this.length; i<n; i++)
if (i in this)
other[i]= mapper.call(that, this[i], i, this);
return other;
};
}
if (!('filter' in Array.prototype)) {
Array.prototype.filter= function(filter, that /*opt*/) {
var other= [], v;
for (var i=0, n= this.length; i<n; i++)
if (i in this && filter.call(that, v= this[i], i, this))
other.push(v);
return other;
};
}
if (!('every' in Array.prototype)) {
Array.prototype.every= function(tester, that /*opt*/) {
for (var i= 0, n= this.length; i<n; i++)
if (i in this && !tester.call(that, this[i], i, this))
return false;
return true;
};
}
if (!('some' in Array.prototype)) {
Array.prototype.some= function(tester, that /*opt*/) {
for (var i= 0, n= this.length; i<n; i++)
if (i in this && tester.call(that, this[i], i, this))
return true;
return false;
};
}
Inne metody ECMA262-5, które nie zostały tutaj zaimplementowane, to Array reduce
/ reduceRight
, metody JSON i kilka nowych Object
metod, które można niezawodnie zaimplementować jako funkcje JS.