【问题标题】:Bind classes to Global Scope in ES6在 ES6 中将类绑定到全局作用域
【发布时间】:2016-08-05 19:26:30
【问题描述】:

我正在尝试在 ES6 不使用任何 jQuery 的情况下重新创建 jQuery 验证器, 我在尝试重新创建其添加验证方法的功能时遇到了障碍通过使用全局作用域,也就是说,如果你在任何地方调用Validator.addMethod,它就会在Validator 中运行关联的函数,并向Validator 添加一个方法。

我似乎无法在 ES6 中执行此操作,因为我不允许将我的类导出到全局范围,我的类永远无法从窗口对象访问,例如 jQuery 是,如果没有这个,任何想要添加新验证函数的人都必须import 一个新函数来添加它的类,我不能简单地调用

Validator.addMethod('required', function(element, value){
  return value.length > 0;
})

在加载验证器类后我想要的任何文件上,所以我的问题是,这在 ES6 中真的不可能,还是我遗漏了什么?我已经知道这不是最佳实践,并且愿意接受建议,但这个想法是易于使用,即使对于不精通 ES6 的人也是如此。

【问题讨论】:

  • 所以这个验证器在前端运行?你在哪里写?是同构的吗?
  • @duxfox-- 它只在前端运行,我在服务器上运行了一个单独的 PHP 验证器

标签: javascript jquery validation ecmascript-6


【解决方案1】:

ES6 及更高版本旨在避免污染全局范围。您的担忧只是 JavaScript 中许多邪恶的不良编码实践的解决方案

顺便说一句,您始终可以访问window 对象并添加一个与您的类相同的属性:

class Validator {}

window.Validator = Validator;

...因为类仍然是一个构造函数和原型继承,由基于类的语法包装。

如果您要在浏览器和 NodeJS 中分发您的库,您可能需要这样做:

class Validator {}

var global = window || global;
global.Validator = Validator;

顺便说一句,如果您想以正确的方式做事,您可以使用通用模块定义分发您的库。 Learn more at the official GitHub repository of Universal Module Definition (UMD).

【讨论】:

  • 或使用globalThis
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
  • 2019-12-06
  • 2016-10-09
相关资源
最近更新 更多