会有一种管理javascript类的新方法吗?
有人知道javascript的结构是否会改变吗?我的意思是有一种方法可以将javascript类管理到包中,就像在Java中一样。已经有办法了吗?JavaScript是文件中的动态代码。您所要做的就是加载一些源代码并动态运行它 每个结构化和管理系统都是在运行时动态编写和完成的。有很多方法可以管理和构造javascript代码会有一种管理javascript类的新方法吗?,javascript,class,class-design,Javascript,Class,Class Design,有人知道javascript的结构是否会改变吗?我的意思是有一种方法可以将javascript类管理到包中,就像在Java中一样。已经有办法了吗?JavaScript是文件中的动态代码。您所要做的就是加载一些源代码并动态运行它 每个结构化和管理系统都是在运行时动态编写和完成的。有很多方法可以管理和构造javascript代码 检查 检查 检查 还有更多 我个人推荐requireJS,因为它没有绑定到任何框架/其他库中。看看,它有一个很棒的模块系统(库,而不是语言扩展)。ECMA-262规范的
- 检查
- 检查
- 检查
- 还有更多
我个人推荐requireJS,因为它没有绑定到任何框架/其他库中。看看,它有一个很棒的模块系统(库,而不是语言扩展)。ECMA-262规范的第四版有软件包,它是在actionscript中实现的。没有JavaScript类。只有对象。您可以将一组对象打包到不同的对象中,如果愿意,可以将其视为模块/名称空间。(最后的示例。) 因此,JavaScript类领域不会有任何“改进”,因为没有,我希望也不会有。坦白说,这是最好的。你愿意处理疯狂的getter/setter、静态成员、protected、类型强制等等吗?原型遗传比“经典遗传”好几英里。只是JavaScript没有太多的时间来实现它 对于JavaScript对象如何工作的惊人解释,我推荐Douglas Crockfords'或我们自己的成员 “名称空间”的一个示例: 关于对象冻结等新功能以及可能添加到(a.k.a第6版)中的软件包,有一些猜测(例如by)
但是,我个人怀疑语言委员会会考虑语言处理一些核心OO原则的方式的巨大改变。 < P>我想你熟悉java域名的概念,在你拥有的域名之后,这样避免与其他供应商的包冲突。您可以使用以下方法模拟Java包(并避免可能的naemspace冲突): 如果您在有限的范围内工作,您甚至可以模拟Java的
import
。(在全球范围内这样做将消除整个包装点):
这里最薄弱的环节是名称空间的根,org
(或com
或任何顶级域)。其他类可能出于其他原因使用它。使用org\u mydomain
作为根目录而不是org.mydomain
可以提供一些安全性
编辑:
如果希望避免使用TLD作为根,那么也可以使用其他根名称。如果您的域名足够独特(例如一个拼写错误的域名,如foogz.com),您可以假设没有其他公司编写可重用的JavaScript类,他们会选择foogz.org
或foogz.biz
,因此您可能是唯一的foogz。)
另一种可能是将TLD附加到域名,并将其用于第一个标记,例如:
mydomainorg.packagename.ClassName
更改是什么意思?不管怎样,现在没有任何正式的方式,所有的包解决方案最终都是自制的。第四版的任何部分会回到JavaScript中吗?原型继承并不是天生就比经典继承好。ES5中现在有getter/setter,JavaScript中有很多类型强制,就这些?但是flash从2变为3不是会有变化吗?我的意思是结构和语法,一切都像js,现在看看它。它仍然是一样的,但是你现在可以构建包了,强制类型也获得了它的价值。@Raynos-我的意思是,就像经典继承那样。这并不是天生的好,但从一开始就更好@nagymafla-不。JavaScript有一个惊人的想法,就是在其核心植入对象。IIRC,ActionScript最初是一种过程语言,后来变异成了一种面向对象的语言。JavaScript一直都是面向对象的。这只是一种不同的OOP;你必须学会爱上它。我们不是已经有了ES5中的Object.freeze
?包装应该与OO分开,对吗?@Raynos+1。
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
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());
function afunc() {
var MyClass = org.mydomain.mypackage.MyClass;
var o = new MyClass(33);
console.log(o.method());
console.log(MyClass.staticMethod());
}