많은 사람들이 MDC 폴백 구현을 사용합니다 (예 : indexOf 등 ). 일반적으로 모든 인수의 유형을 명시 적으로 확인하는 범위까지 엄격하게 표준을 준수합니다.
불행히도 저자가이 코드를 사소하고 자유롭게 사용할 수있는 것으로 간주하는 것은 분명하지만,이를 서면으로 명시 적으로 허가 한 사람은없는 것 같습니다. 전체 위키는 CC Attribution-ShareAlike입니다. CC가 코드 용으로 설계되지는 않았지만 수용 가능한 라이센스 인 경우입니다.
js-methods는 일반적으로 괜찮아 보이지만 함수가 있어야하는 방식의 가장자리 (예 : 정의되지 않은 목록 항목, 목록을 변경하는 함수) 주위의 표준을 준수하지는 않습니다. 또한 dodgy stripTags 및 불완전한 UTF-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 함수로 안정적으로 구현할 수있는 몇 가지 새로운 메소드가 포함됩니다.