总所周知小程序中的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,
});
之后我们便可以直接进行全局使用,对于一些特殊场景还是非常有用的