Javascript 允许用户为JavsScript库定义另一个别名
我创建了一个JavaScript库,其代码如下所示 问题:如果使用此库的开发人员已经创建了一个名为Javascript 允许用户为JavsScript库定义另一个别名,javascript,Javascript,我创建了一个JavaScript库,其代码如下所示 问题:如果使用此库的开发人员已经创建了一个名为xyz的变量,那么我如何允许开发人员根据此处提到的代码为库定义另一个别名?现在,如果发生这种情况,我会在浏览器的控制台中打印一条有用的消息,以便让开发人员知道重复的名称 库代码 (function (window) { function define_library() { //code for JavaScript library that has been omitted }
xyz
的变量,那么我如何允许开发人员根据此处提到的代码为库定义另一个别名?现在,如果发生这种情况,我会在浏览器的控制台中打印一条有用的消息,以便让开发人员知道重复的名称
库代码
(function (window) {
function define_library() {
//code for JavaScript library that has been omitted
}
if (typeof (xyz) === 'undefined') {
window.xyz = define_library();
}
else {
console.log("'xyz' is already defined. Library/variable is already defined.");
}
})(window);
可能是define\u library
方法需要作为公共方法公开,以便开发人员可以使用以下代码为库创建另一个别名,但不确定在这种情况下的最佳做法
开发人员在其项目中为库使用另一个别名
window.abc = define_library();
有朝一日,您将能够将库发布为JavaScript模块(今年的新功能,ES6的一部分),这将不再是您的问题 同时,有几种不同风格的异步模块定义(AMD)库(如RequireJS),您可以添加对它们的支持
if (typeof require !== "undefined") {
// Do RequireJS stuff
} else if (typeof exports !== "undefined") {
// Set your top-level library functions on exports
} else {
// ...
}
如果所有其他方法都失败了,jQuery的方法()相当聪明:它获取它将要编写的全局变量的前一个值,并提供一种方法将该值设置回原来的值。在您的情况下,它可能如下所示:
(function(window) {
var original_xyz = window.xyz;
// ...your normal stuff...
// A method that releases the symbol:
window.xyz.noConflict = function() {
window.xyz = original_xyz;
return this;
};
})(window);
然后使用它的人:
<script src="your_library.js"></script>
<script>
var abc = xyz.noConflict();
</script>
您可以通过允许使用JS代码的开发人员编辑JS代码来实现这一点。在本例中,您可以提供一个返回值,该值可能存储在任何变量中
var moduleGlobalName = 'xyz';
(function( global ) {
global[moduleGlobalName] = function define_library() {
// code for JavaScript library that has been omitted
}
})( window, moduleGlobalName || 'xyz' );
但我建议您使用AMD模块(如我在上面的评论中所建议的),并使用适当的模块加载器,如。这就是您不应在全局范围内创建函数和变量的原因。使用某种JS模块将代码封装到一个模块中,该模块可以加载任何名称。关于为不同模块加载器(例如Require.JS、CommonJS、jQuery插件)提供JS的介绍,请参阅@feeela:Nifty链接,这是我的阅读列表。因此,开发人员可以使用您的方法使用
abc
作为库名,只需编写以下代码:var abc=xyz.noConflict()
?