कई एमडीसी फॉलबैक कार्यान्वयन का उपयोग करते हैं (उदाहरण के लिए indexOf के लिए )। वे आम तौर पर कड़ाई से मानकों-आज्ञाकारी हैं, यहां तक कि सभी तर्कों के प्रकारों को स्पष्ट रूप से जांचने की सीमा तक।
दुर्भाग्य से, जबकि यह स्पष्ट है कि लेखक इस कोड को तुच्छ और स्वतंत्र रूप से प्रयोग करने योग्य मानते हैं, इसको लिखने में स्पष्ट लाइसेंस-अनुदान नहीं लगता है। एक पूरे के रूप में विकि सीसी एट्रीब्यूशन-शेयरएलाइक है, अगर यह एक स्वीकार्य लाइसेंस है (हालांकि सीसी कोड के लिए डिज़ाइन नहीं किया गया है)।
सामान्य तौर पर js- विधियाँ ठीक लगती हैं, लेकिन कार्य के रूप में होने के किनारों के चारों ओर मानकों के अनुरूप नहीं है (जैसे कि अपरिभाषित सूची आइटम, कार्य जो सूची को म्यूट करते हैं)। यह अन्य यादृच्छिक गैर-मानक तरीकों से भी भरा हुआ है, जिसमें कुछ संदिग्ध लोगों जैसे डोडी स्ट्रिपटैग और अपूर्ण यूटीएफ -8 कोडेक (जो कि थोड़ा अनावश्यक भी है, unescape(encodeURIComponent)
ट्रिक दिया गया है ) शामिल हैं।
इसके लायक क्या है, यहां मैं क्या उपयोग करता हूं (जिसे मैं सार्वजनिक डोमेन में जारी करता हूं, अगर इसे सभी के लिए कॉपीराइट योग्य कहा जा सकता है)। यह MDC संस्करणों की तुलना में थोड़ा छोटा है क्योंकि यह टाइप-सूँघने का प्रयास नहीं करता है कि आपने मूर्खतापूर्ण तरीके से कुछ नहीं किया है जैसे कि नॉन-फंक्शन कॉलबैक या नॉन-पूर्णांक इंडेक्स, लेकिन इसके अलावा यह मानक-अनुरूप होने का प्रयास करता है। (मुझे पता है अगर मैं कुछ भी याद किया है; ;-))
'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;
};
}
अन्य ECMA262-5 तरीकों को यहां लागू नहीं किया गया है, जिनमें Array reduce
/ reduceRight
, JSON वाले और कुछ नए Object
तरीके शामिल हैं जिन्हें JS कार्यों के रूप में मज़बूती से लागू किया जा सकता है।