Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
会有一种管理javascript类的新方法吗?_Javascript_Class_Class Design - Fatal编程技术网

会有一种管理javascript类的新方法吗?

会有一种管理javascript类的新方法吗?,javascript,class,class-design,Javascript,Class,Class Design,有人知道javascript的结构是否会改变吗?我的意思是有一种方法可以将javascript类管理到包中,就像在Java中一样。已经有办法了吗?JavaScript是文件中的动态代码。您所要做的就是加载一些源代码并动态运行它 每个结构化和管理系统都是在运行时动态编写和完成的。有很多方法可以管理和构造javascript代码 检查 检查 检查 还有更多 我个人推荐requireJS,因为它没有绑定到任何框架/其他库中。看看,它有一个很棒的模块系统(库,而不是语言扩展)。ECMA-262规范的

有人知道javascript的结构是否会改变吗?我的意思是有一种方法可以将javascript类管理到包中,就像在Java中一样。已经有办法了吗?

JavaScript是文件中的动态代码。您所要做的就是加载一些源代码并动态运行它

每个结构化和管理系统都是在运行时动态编写和完成的。有很多方法可以管理和构造javascript代码

  • 检查
  • 检查
  • 检查
  • 还有更多

我个人推荐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());
}