有谁知道结构化javascript是否会被更改?我的意思是有一种方法将javascript类管理到包中,就像在Java中一样。有没有办法?
答案 0 :(得分:4)
我想您熟悉在您拥有的域之后命名包的Java概念,这样可以避免与其他供应商的包冲突。您可以使用以下命令模拟Java包(并避免可能的空间冲突):
if (typeof(org) == "undefined")
org = {};
if (typeof(org.mydomain) == "undefined")
org.mydomain = {};
if (typeof(org.mydomain.mypackage) == "undefined")
org.mydomain.mypackage = {};
org.mydomain.mypackage.MyClass = function (newA) {
// constructor
this.a = newA;
}
org.mydomain.mypackage.MyClass.staticMethod = function () {
// static method
return "static";
}
org.mydomain.mypackage.MyClass.prototype.method = function () {
// normal method
return a;
}
var o = new org.mydomain.mypackage.MyClass(13);
console.log(o.method());
console.log(org.mydomain.mypackage.MyClass.staticMethod());
如果您在有限的范围内工作,甚至可以模拟Java的import
。 (在全球范围内这样做会消除整个包装点):
function afunc() {
var MyClass = org.mydomain.mypackage.MyClass;
var o = new MyClass(33);
console.log(o.method());
console.log(MyClass.staticMethod());
}
这里最薄弱的链接是我们的命名空间的根,org
(或com
或任何顶级域名)。另一类可能出于某些其他原因使用它。使用org_mydomain
作为根而不是org.mydomain
可能会带来一定的安全性。
修改强>
如果您想避免使用TLD作为根,那么您还有其他可能的根名称。如果您的域名足够独特(例如,像 foogz.com 这样的一个错误拼写错误的域名),您可以假设没有其他公司会编写可重复使用的JavaScript类,这些类将用于foogz.org
或foogz.biz
,所以你可能会成为唯一的 foogz 。 :)
另一种可能性是将您的TLD附加到域名,并将其用于第一个标记,例如:mydomainorg.packagename.ClassName
。
答案 1 :(得分:3)
没有JavaScript类。只有对象。您可以将一堆对象打包到另一个对象中,如果您愿意,可以将其视为模块/命名空间。 (最后的例子。)
因此,JavaScript类中没有任何“改进”,因为没有任何“改进”,我希望也不会有。坦率地说,这是最好的。你宁愿处理疯狂的getter / setter,静态成员,受保护,类型胁迫等等吗?原型继承以英里为单位击败“经典继承”。只是JavaScript没有太多时间才能做到恰到好处。
关于JavaScript对象如何工作的惊人解释,我推荐Douglas Crockfords'"On JavaScript"或some answers来自我们自己的成员。
“命名空间”的一个例子:
var obj = {
classRoom : {...},
objectify : function() {...},
capacity : 5
};
var myClass = obj.classRoom; //access it like you access a module
var capacity = 7; //this is a global variable named capacity, so it won't tamper with obj.capacity
答案 2 :(得分:0)
JavaScript是文件中的动态代码。您所做的只是加载一些源代码并动态运行它。
每个结构和管理系统都是在运行时动态编写和完成的。有很多方法可以管理和构建javascript代码。
我个人推荐requireJS,因为它没有绑定到任何框架/其他库。
答案 3 :(得分:0)
查看http://joose.it,它有一个很棒的模块系统(库,而不是语言扩展)。 ECMA-262规范的第4版有软件包,它在actionscript中实现。
答案 4 :(得分:0)
有一些猜测(例如John Resig)关于可能添加到ECMAScript Harmony的对象冻结和包等新功能(a.k.a第6版)。
但是,我个人怀疑语言委员会会考虑对语言处理其一些核心OO原则的方式进行如此大的改变。