safari中Date的兼容性处理

先上代码

// 重写Date对象
// 如果是vue或者react项目  在入口文件处写下方代码
window.OldDate = window.Date
var bind = Function.bind
var unbind = bind.bind(bind)
function instantiate (constructor, args) {
  return new (unbind(constructor, null).apply(null, args))()
}

window.Date = (function (Date) {
  Object.setPrototypeOf(MyDate, Date)
  MyDate.prototype = Date.prototype
  return MyDate
  function MyDate () {
    let arg = arguments[0]
    if (Object.prototype.toString.call(arg) === '[object String]') {
      arguments[0] = arg = arg.replace(/-/g, '/')
      arguments[0] = arg.replace(/T/, ' ')
      console.log(arguments[0])
    }
    return instantiate(Date, arguments)
  }
}(window.OldDate))

这些代码是在vue-cli中写的, 会有一层babel转换

之前尝试过很多 包括class去继承对象, 直接覆盖原型链(now方法拿不到)

已经开始怀疑人生了, 经过多方查证之后发现

  • ES6代码在babel代理之后会与es6原生class的extends出现差异
  • 直接覆盖prototype在调用static方法时不会向上查找需要覆盖__proto__属性, 但是__proto__属性已经过时了, 解决的话是使用Object.setPrototypeOf代替直接覆盖原型链的方法

Ps: babel没有办法不用, 所以直接pass掉了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值