gpt4 book ai didi

javascript - 为什么 Extends 必须是 mootools 类定义中的第一个属性?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:35:31 26 4
gpt4 key购买 nike

mootools docs声明“Extends 属性应该是类定义中的第一个属性。”。经过几个小时的调查,我在 mootools 文档中偶然发现了这一行。

虽然我原来的问题可以在设置Extends作为第一个属性后得到解决,但我不明白为什么。

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

那么mootools为什么要依赖顺序呢?尝试阅读 mootools 代码对我没有帮助;)。

最佳答案

首先,了解这一点:MooTools Class 构造函数获取您传递给它的简单对象,然后循环遍历属性

让我们从 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 - ExtendsImplements 下定义的修改器 - https://github.com/mootools/mootools-core/blob/master/Source/Class/Class.js#L100-L113

对于 extends,它将设置 parent 属性并设置新对象构造函数的原型(prototype) - https://github.com/mootools/mootools-core/blob/master/Source/Class/Class.js#L103-L104 - 这需要尽早发生。 它没有专门采摘 Extends/Implements 因为它被构建为可扩展并允许您添加自己的自定义 Mutator,例如。 MooTools-more 中的 Binds - 也许不是唯一的解决方案,但有些东西最好保留为笨拙但灵活的 API,而不是刚性和非 DRY 糖

特别是,当 ImplementsExtends 之前时,事情会中断,因为 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 退出为止。

关于javascript - 为什么 Extends 必须是 mootools 类定义中的第一个属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19390537/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com