Javascript中的C#名称空间机制
我是一个JavaScript语言开发人员,而不是通过使用jQuery按钮单击AJAX获取数据。Javascript中的C#名称空间机制
来自C#背景我没有看到在Javascript中使用名称空间的直接方法。我试图用下面的代码来模仿它。我的问题与using(namespace);
方法有关,它将所有从命名空间对象复制到窗口对象。在搜索如何以模块化方式处理javascript时,我还没有遇到过这样的编码,我想知道以下几点:1)这个模式是否有名字? 2)using(namespace);
有什么优点和缺点?
console.clear();
var System = {
IO: {
OutletOption: {
Console: 1,
MessageBox: 2
},
Outlet: function Outlet(outletOption) {
var _self = this;
var _outletOption = outletOption;
//private
_self.log = function(txt) {
console.log(txt);
};
_self.messageBox = function(txt) {
alert(txt);
};
//public
_self.out = function(txt) {
switch (_outletOption) {
case System.IO.OutletOption.MessageBox:
_self.messageBox(txt);
break;
case System.IO.OutletOption.Console:
_self.log(txt);
break;
}
};
return {
out: _self.out
};
}
}
};
function using(namespace, scope) {
console.log(scope);
for (var key in namespace) {
scope[key] = namespace[key];
}
}
(function() {
function execute() {
//All your code goes here
using(System.IO, this);
var o = new this.Outlet(this.OutletOption.Console);
o.out("Some test text.");
};
return {
execute: execute
};
})().execute();
JavaScript没有命名空间。如果你来自C#,使用TypeScript和Angular2 +会更容易。 TypeScript是带有类型的JavaScript。
谢谢你的你的补充。我考虑过TypeScript。让我回想起使用它的是所需的类型定义:外部库可能没有它们,或者很快就过时了。我必须说,你的答案不是对我的回答,更多的是评论,因为它不回答我提出的两个问题。 –
我已经说过,JavaScript没有名称空间:) –
我建议你使用像Angularjs这样的框架,以便在模块化方面有一个更好的方法。 – PhiceDev
您的'using()'函数会污染全局*名称空间*,并且很可能导致冲突,这就是名称空间应该阻止开始的类型。您可以使用嵌套对象和JavaScript来模拟名称空间,Javascript有一个'with'关键字来设置一个隐式名称空间,但是它被弃用,因为它有各种各样的问题。 –
@MikaelLennholm它污染的好处!谢谢。 –