为什么扩展必须是mootools类定义中的第一个属性
Why must Extends be the first property in a mootools class definition?
mootools 文档指出"扩展属性应该是类定义中的第一个属性。经过几个小时的调查,我在mootools文档中偶然发现了这一行。
虽然我的原始问题可以在设置扩展为第一个属性后解决,但我不明白为什么。
根据 js 文档,对象中属性的顺序是引擎实现的主题。对订单不作任何形式的保证。
那么,为什么mootools依赖于订单呢?试图阅读mootools代码并没有帮助我;)。
首先,理解这一点:MooTools 类构造函数获取您传递给它的简单对象,然后循环访问属性
让我们从implement
开始 - https://github.com/mootools/mootools-core/blob/master/Source/Class/Class.js#L75 - 正在针对传递给 Class 构造函数的所有属性调用。它是一个重载函数 - 请参阅 https://github.com/mootools/mootools-core/blob/master/Source/Class/Class.js#L98 - 它允许它处理键>值对的对象。该overloadSetter
使用标准的for (var key in obj)
循环,在大多数实现中将是FIFO - 忽略了Webkit对键进行排序并返回具有数字索引或首先以数字字符开头的键的奇怪趋势。ECMA 规范不保证属性的顺序
循环访问对象属性时,它将尝试查看在 Class.Mutators
- Extends
和 Implements
- https://github.com/mootools/mootools-core/blob/master/Source/Class/Class.js#L100-L113 下定义的突变器
在 extends 的情况下,它将设置 parent
属性,并设置新对象构造函数的原型 - https://github.com/mootools/mootools-core/blob/master/Source/Class/Class.js#L103-L104 - 这需要尽早发生。它不会专门提取Extends
/Implements
,因为它被构建为可扩展并允许您添加自己的自定义突变器,例如。 Binds
MooTools-more - 也许不是唯一的解决方案,但有些东西最好保留为笨拙但灵活的API,而不是刚性和非DRY糖。
特别是,当Implements
在Extends
面前时,事情会破裂,因为Implements
实际上会......没关系 - 很久以前,当我第一次遇到它时,我已经在一篇博客文章中描述了这一点 - 但是与一些MooTools核心开发人员进行了交谈,原因变得很清楚。看看我在这里经历了什么:http://fragged.org/mootools-pattern-fun-class-implements-extends-at-the-same-time_1359.html
可以说,现在已经倒闭的mootools-2.0 AMD分支的情况更好 - https://github.com/kamicane/mootools-core/blob/define-2/Source/Core/Class.js#L19
所以 - 现在,我们需要忍受它 - 直到Prime无论如何都出来。
- 而循环只设置php中输入字段中的第一个值
- 要求定义另一个文件中的对象
- 错误:$injector:modulerr模块错误(我的第一个SPA应用程序)
- IE11中的第二个调用取消了第一个Fetch API调用
- Javascript XMLHttpRequest——只有第一个POST请求有效
- 使用javascript或angularjs特定过滤器搜索字符串中第一个img标记的json值
- 将OnClick函数设置为<ul>,最后一个ul是擦除第一个ul-s
- RxJS油门行为;立即获取第一个值
- Angular UI网格:如何通过第一个UI网格中的按钮使第二个UI网格可见
- 选择多个实例中的第一个
- 如何在调用下一个请求之前完成第一个Ajax Get请求
- Lodash:返回对象的第一个键,该对象的值(即数组)中有一个给定的元素(即字符串)
- 看起来第一个console.log是'It’不太对
- 与杜兰达尔合作的第一个JavaScript项目.尝试从第三方 API 获取数据
- 节点发布错误对象的第一个“属性”
- Javascript:表单验证getElementById仅返回第一个id元素
- JS在隐藏未定义的值后仅从数组中返回第一个id的值
- 第一个100个素数javascript,为什么在我的素数数组之后没有定义
- 如何在元素的类定义列表中选择第一个类
- JavaScript:使用第一个“行”将二维数组转换为对象数组来定义属性