微信小程序无法访问window,如何添加全局顶级方法或属性?直接全局顶层调用!

总所周知小程序中的wx对象存在许多封装好的方法,我们可以在全局直接通过wx.$name 直接调用,那我们又该如何去自己定义类似这样的顶级对象或者方法呢? 

在传统浏览器中有个顶级的window对象,我们可以直接向其注入我们的全局方法或者属性,但在小程序中却行不通,因为我们在全局无法直接访问到window对象,虽然你可以在开发者工具的控制台中get到。

但我们可以另辟蹊径,既然没有window对象,我们可以找Object!!, 毕竟“js中一起皆对象”,原型链顶层就是我们的Object,故此我们可以这样做

Object.defineProperty(Object.prototype, "Zero", {
  value: {
    dateFormat(time) {
      let date = new Date(time);
      let y = date.getFullYear();
      let m = date.getMonth() + 1;
      let d = date.getDate();
      let h = date.getHours();
      let i = date.getMinutes();
      let s = date.getSeconds();
      return y + "-" + m + "-" + d + " " + h + ":" + i + ":" + s;
    },
  },
  configurable: false,
  enumerable: false,
});

 当然我们也可以直接向wx 对象中添加自己的方法,甚至对其原生方法做出一些修改和拓展

Object.defineProperty(wx, "dateFormat", {
  value() {
    function dateFormat(time) {
      let date = new Date(time);
      let y = date.getFullYear();
      let m = date.getMonth() + 1;
      let d = date.getDate();
      let h = date.getHours();
      let i = date.getMinutes();
      let s = date.getSeconds();
      return y + "-" + m + "-" + d + " " + h + ":" + i + ":" + s;
    }
    return dateFormat.apply(this, arguments);
  },
  configurable: false,
  enumerable: false,
});

 之后我们便可以直接进行全局使用,对于一些特殊场景还是非常有用的

 

猜你喜欢

转载自blog.csdn.net/SAXX2/article/details/132691507