-1

我想创建一个 js 库(用于帮助测试)。我希望这个库向X数组或对象添加一种新方法。但是有些人可能不希望这种行为,而是更愿意能够选择名称(Y而不是X),甚至根本没有新方法,而是像使用它一样X(array).x()

有些人使用requireJs,但有些人不使用。那么提供这种新功能的最佳实践是什么?应该如何做到这一点以避免名称冲突并使库易于使用?

有没有办法在不污染命名空间的情况下提供新功能,让用户将其分配给他想要的任何变量?

澄清:

假设我想向打印“hello world”的数组添加一个方法。我可以提供一个全局变量“HelloWorldLibrary”,然后用户可以将它绑定到他想要的任何方法。但这已经将一个名称引入全局命名空间。有什么方法可以避免它还是正确的方法,我应该这样做?

4

1 回答 1

0

不,目前没有办法以作用域的方式将方法绑定到对象,理由是它可以通过外部方法来完成,使用自定义对象(而不是直接将其粘贴在 Array 或 Object 上)并且它在运行。

这个用例是非常真实的(为每个对象添加一个属性),有一个抽象的引用提案正是这样做的——它现在被函数绑定提案所取代,ES7 的建议语法看起来像这样:

function myNewMethod(x){
    alert(this.y + x);
}

var obj = {y: 5};
obj::myNewMethod(5); // logs 10

至于实际的模块管理 - 您可以使用 ES6 模块和模块加载器 API。ES6 模块(importexport关键字)允许您在不污染全局命名空间的情况下导入/导出内容。ES6 之前的系统的解决方案使用 RequireJS 之类的模块加载器和 browserify 之类的工具。

于 2015-04-26T21:30:53.930 回答