ie8不兼容的一些方法兼容实现

if (!Object.create) {
Object.create = function (o) {
if (arguments.length > 1) {
throw new Error('Object.create implementation only accepts the first parameter.');
}
function F() {}
F.prototype = o;
return new F();
};
}

if (!Object.keys) {
Object.keys = function(o) {
if (o !== Object(o)) {
throw new TypeError('Object.keys called on a non-object');
}
var k=[], p;
for (p in o) {
if (Object.prototype.hasOwnProperty.call(o,p)) {
k.push(p);
}
}
return k;
};
}

/*
* Date ES5 extend
*/
if (!Date.now) {
Date.now = function now() {
return (new Date).valueOf();
};
}


/*
* Function ES5 extend
*/
if (!Function.prototype.bind) {
  Function.prototype.bind = function (oThis) {
if (typeof this !== "function") {
  // closest thing possible to the ECMAScript 5 internal IsCallable function
  throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
}

var aArgs = Array.prototype.slice.call(arguments, 1), 
fToBind = this, 
fNOP = function () {},
fBound = function () {
  return fToBind.apply(this instanceof fNOP && oThis
? this
: oThis || window,
  aArgs.concat(Array.prototype.slice.call(arguments)));
};

fNOP.prototype = this.prototype;
fBound.prototype = new fNOP();

return fBound;
  };
}

/*
* String ES5 extend
*/
if(!String.prototype.trim) {
String.prototype.trim = function () {
return this.replace(/^\s+|\s+$/g,'');
};
}

/*
* Array ES5 extend
*/
if(!Array.isArray) {
Array.isArray = function (vArg) {
return Object.prototype.toString.call(vArg) === "[object Array]";
};
}

if (typeof Array.prototype.forEach != "function") {
  Array.prototype.forEach = function (fn, scope) {
var i, len;
for (i = 0, len = this.length; i < len; ++i) {
if (i in this) {
fn.call(scope, this[i], i, this);
}
}
    };
}

if (typeof Array.prototype.map != "function") {
 Array.prototype.map = function (fn, context) {
var arr = [];
if (typeof fn === "function") {
 for (var k = 0, length = this.length; k < length; k++) {
 arr.push(fn.call(context, this[k], k, this));
 }
}
return arr;
 };
}

if (typeof Array.prototype.filter != "function") {
 Array.prototype.filter = function (fn, context) {
var arr = [];
if (typeof fn === "function") {
 for (var k = 0, length = this.length; k < length; k++) {
 fn.call(context, this[k], k, this) && arr.push(this[k]);
 }
}
return arr;
 };
}

if (typeof Array.prototype.some != "function") {
 Array.prototype.some = function (fn, context) {
var passed = false;
if (typeof fn === "function") {
 for (var k = 0, length = this.length; k < length; k++) {
 if (passed === true) break;
 passed = !!fn.call(context, this[k], k, this);
 }
}
return passed;
 };
}

if (typeof Array.prototype.every != "function") {
 Array.prototype.every = function (fn, context) {
var passed = true;
if (typeof fn === "function") {
 for (var k = 0, length = this.length; k < length; k++) {
 if (passed === false) break;
 passed = !!fn.call(context, this[k], k, this);
 }
}
return passed;
 };
}

if (typeof Array.prototype.indexOf != "function") {
 Array.prototype.indexOf = function (searchElement, fromIndex) {
var index = -1;
fromIndex = fromIndex * 1 || 0;

for (var k = 0, length = this.length; k < length; k++) {
 if (k >= fromIndex && this[k] === searchElement) {
 index = k;
 break;
 }
}
return index;
 };
}

if (typeof Array.prototype.lastIndexOf != "function") {
 Array.prototype.lastIndexOf = function (searchElement, fromIndex) {
var index = -1, length = this.length;
fromIndex = fromIndex * 1 || length - 1;

for (var k = length - 1; k > -1; k-=1) {
if (k <= fromIndex && this[k] === searchElement) {
index = k;
break;
}
}
return index;
 };
}

if (typeof Array.prototype.reduce != "function") {
 Array.prototype.reduce = function (callback, initialValue ) {
var previous = initialValue, k = 0, length = this.length;
if (typeof initialValue === "undefined") {
previous = this[0];
k = 1;
}
 
if (typeof callback === "function") {
 for (k; k < length; k++) {
this.hasOwnProperty(k) && (previous = callback(previous, this[k], k, this));
 }
}
return previous;
 };
}

if (typeof Array.prototype.reduceRight != "function") {
 Array.prototype.reduceRight = function (callback, initialValue ) {
var length = this.length, k = length - 1, previous = initialValue;
if (typeof initialValue === "undefined") {
previous = this[length - 1];
k--;
}
if (typeof callback === "function") {
  for (k; k > -1; k-=1) {          
 this.hasOwnProperty(k) && (previous = callback(previous, this[k], k, this));
  }
}
return previous;
 };
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值