这个
https://www.sweetjs.org
库允许转换JavaScript代码。我想知道是否可以使用它以安全的方式扩展原生对象,如数组、对象、字符串等,而不将任何东西附加到它们的原型上。
似乎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
}
}
所以我们得到了所有正确的扩展类型,我们的原生对象将保持完全干净。