Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.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 为什么扩展必须是mootools类定义中的第一个属性?_Javascript_Mootools - Fatal编程技术网

Javascript 为什么扩展必须是mootools类定义中的第一个属性?

Javascript 为什么扩展必须是mootools类定义中的第一个属性?,javascript,mootools,Javascript,Mootools,“扩展属性应该是类定义中的第一个属性”的状态。经过数小时的调查,我在mootools文档中偶然发现了这句话 虽然我最初的问题可以在设置作为第一个属性扩展后解决,但我不明白为什么 根据js文档,对象中属性的顺序是引擎实现的主题。本订单不作任何形式的保证 那么为什么mootools依赖于订单呢?尝试阅读mootools代码对我没有帮助;) 首先,要理解这一点:MooTools类构造函数接受传递给它的简单对象,然后循环遍历属性 让我们从implement-开始,对传递给类构造函数的所有属性调用。它是一

“扩展属性应该是类定义中的第一个属性”的状态。经过数小时的调查,我在mootools文档中偶然发现了这句话

虽然我最初的问题可以在设置作为第一个属性扩展后解决,但我不明白为什么

根据js文档,对象中属性的顺序是引擎实现的主题。本订单不作任何形式的保证


那么为什么mootools依赖于订单呢?尝试阅读mootools代码对我没有帮助;)

首先,要理解这一点:MooTools类构造函数接受传递给它的简单对象,然后循环遍历属性

让我们从
implement
-开始,对传递给类构造函数的所有属性调用。它是一个重载函数-请参阅-它允许它处理键->值对的对象overloadSetter使用标准的
for(obj中的var键)
循环,这在大多数实现中都是FIFO-忽略webkit对键进行排序并返回那些具有数字索引或首先以数字字符开头的键的奇怪趋势。ECMA规范不保证属性的顺序

当循环对象属性时,它将尝试查看在
类下定义的变量。变量
-
扩展
实现
-

在extends的情况下,它将设置
parent
属性,并设置新对象构造函数的原型——这需要尽早进行。它并没有专门提取
扩展
/
实现
,因为它是为可扩展而构建的,并且允许您在MooTools中添加自己的自定义变体,例如,
绑定
,这可能不是唯一的解决方案,但有些东西最好作为笨拙但灵活的API,而不是僵硬和非干性的

特别是,当
实现
扩展
之前时,事情就会破裂,因为
实现
实际上会。。。nevermind——很久以前,当我第一次遇到它时,我在一篇博客文章中描述了这一点——但与一些MooTools核心开发人员交谈后,我明白了原因。看看我在这里经历了什么:

可以说,现在已经不复存在的mootools-2.0 AMD分支机构的情况要好一些-


所以——现在,我们需要忍受它——直到首相出局

在现代JS实现中,顺序往往是稳定的,但是如果我个人与MOOToT维护有任何关系,我会认为这是一个糟糕的建筑决策,并坚持它是固定的。如果您阅读了源代码并理解了使用特殊的mutator属性更改构造函数对象的后果。扩展定义了原型。如果你是以普通的方式做这件事的话,那么早做是有意义的。它是(obj中的var)循环中的一个