aralejs / class

Class Utility
aralejs.org/class
102 stars 88 forks source link

关于Class.extend()的思考 #7

Closed jpuncle closed 10 years ago

jpuncle commented 11 years ago

先说一下背景,仔细的阅读了 Class 的代码,目前它暴露的接口有:

Class.create()
Class.extend()
SomeClass.extend()
SomeClass.implement()
Class()

我很喜欢这些接口,我还知道存在 ImplementExtends

Class.create({
    Implement: Flyable,
    Extends: Animal
})

我很喜欢使用了 mixin 方式的 Implement ,但是 Extends 让我比较困惑, Extends 应该用在哪儿呢?我仔细分析了下代码

发现,只有在 Class.create()Extends 的设置才会有用,那么我还要它干嘛? 作为一个 Class 类的使用者,我应该完全用不到 Extends 才对,我仅仅需要 parent 就够了。或许我们可以这样设计:

这样,我们常见的用法就会是这样:

Class.create(parent, props)
Class.create(props); // Class.extend();
SomeClass.extend()
SomeClass.implement()
Class()

是不是简单很多呢?

lifesinger commented 11 years ago

感谢你的建议,我们在下一个版本会仔细考虑。

接口的确存在一些冗余

flashlizi commented 10 years ago

arale的Class实现很精巧,但个人感觉一个接口即可,即只需:

Class.create(properties)

具体来说,可以这样:

Class.create({
    Extends: ParentClass,
    Implements: ImplClass,
    Statics: StaticProps,

    constructor: Ctor,
    propName: propValue,
    methodName: method
});

原因如下: 1、单一接口,简单方便。一个create全部搞定,不用那么多相似的接口。 2、SomeClass.extend/implement这样的接口有污染SomeClass之嫌。不如直接用Extends/Implements属性替代。 3、用constructor替代initialize简化构造函数,实例化效率也会随之大大提升。 4、Class(fn)基本没有太大用处,也可以省略。

popomore commented 10 years ago

@jpuncle Class.create(parent, props) 一般用的什么场景?我觉得是可以用 Class.create(properties) 代替