Ste*_*e B 9 javascript namespaces microsoft-ajax
在我的企业环境中,我们使用了大量的JavaScript.为了简化所有这些脚本的管理,并避免命名冲突,我们采用了命名空间的javascript命名约定,基本上是:
CompanyName.ProjectName.Area.XYZ.js
要创建名称空间,我们使用以下模式:
var Company;
(function (Company) {
(function (Project) {
(function (Area) {
(function (XYZ) {
function function1(args) {
},
function function2(args) {
}
})(Area.XYZ|| (Area.XYZ = {}));
})(Project.Area || (Project.Area = {}));
var Area = Project.Area;
})(Company.Project || (Company.Project = {}));
var Project = Company.Project;
})(Company || (Company = {}));
Run Code Online (Sandbox Code Playgroud)
哪个工作正常(实际上,这是TypeScript脚本的输出).
但是,我也有一些使用Microsoft Ajax命名空间函数的脚本,因为这是失控应用程序(javascript插件)所必需的.
我用这个声明:
Type.registerNamespace('CompanyName.ProjectName.Area');
CompanyName.ProjectName.Area.ABC = function() {
}
CompanyName.ProjectName.Area.ABC.prototype = {
function1 : function (args) {
},
function2 : function (args) {
}
}
Run Code Online (Sandbox Code Playgroud)
但是调用Type.registerNamespace抛出一个错误:
Sys.InvalidOperationException:Object Company已存在且不是命名空间
我怎样才能恰当地结合这两个世界?如何解决我的问题并使警告消失?
我无法控制脚本包含的顺序,因为它是由应用程序动态生成的.
我不想将整个代码迁移到Microsoft的模式,因为它非常无用且难以阅读.当我迁移到打字稿时,我甚至无法控制命名空间输出.
我也不想引入一个替代命名空间来排除Ajax的命名空间,因为它会给所有团队带来一些混乱.
几个月后......我终于不得不创建两个独立的名称空间。一种用于 MS Ajax 刚性模型,一种用于自行创建的命名空间。
CompanyName.ProjectName.Area
CompanyNameAjax.ProjectName.Area
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2959 次 |
| 最近记录: |