0

https://www.sweetjs.org库允许转换 JavaScript 代码。我想知道是否可以使用它以安全的方式扩展原生对象,如 Array、Object、String 等,而无需将任何东西附加到它们的原型上。

看起来 sweet.js 应该能够转换这个 JS 代码

{ a: 1 }.isEmpty()

进入

Extensions.isEmpty({ a: 1 })

实施可能是

Extensions.isEmpty = (o) => {
  if ('isEmpty' in o) return o.isEmpty()
  for (const k in o) if (o.hasOwnProperty(k)) return false
  return true
}

但我不确定我应该在 Sweet.JS 中编写什么代码才能使其正常工作

附言

使用 TypeScript 应该会更好。我们可以通过在下面给出错误声明来欺骗 TypeScript 认为我们的对象是扩展的,然后在 TypeScript 编译后应用 Sweet.JS 编译。

declare global {
  interface Object {
    isEmpty(): boolean
  }
}

所以我们得到了所有正确的扩展类型,我们的原生对象将保持完全干净。

4

0 回答 0