javascript - 将类绑定(bind)到 ES6 中的全局范围

标签 javascript jquery validation ecmascript-6

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

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

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

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

最佳答案

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

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

class Validator {}

window.Validator = Validator;

...因为类仍然是构造函数和原型(prototype)继承,由基于类的语法包裹。

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

class Validator {}

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

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

关于javascript - 将类绑定(bind)到 ES6 中的全局范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38796519/

相关文章:

c# - 使用 Validator 时忽略 .NET 4 RTM MetadataType 属性

ruby-on-rails - 如何判断哪个关联模型未通过ActiveRecord验证?

javascript - ajax后加载外部javascript

javascript - 动态添加大量图片到页面,后台加载

javascript - Ajax 联系表单中的文件上传不起作用

jquery - 将文本放大三倍并恢复到初始大小

regex - 什么是 ScaffoldColumn 和 RegularExpression 属性

javascript - 创建动态表单元素,如何保存它们及其状态?

javascript - Firefox 在禁用输入时直接通过 DOM 根传播上下文菜单事件

javascript - 如何从元素中分离jquery事件(函数)