Backbone: ECMAScript 6中的属性

4
我正在寻找一个良好的ECMAScript 6版本,以替代以下Backbone代码:
var MyModel = Backbone.Model.extend({});

var MyCollection = Backbone.Collection.extend({
    model: MyModel
});

这种模式广泛应用于Backbone的models,views和collections中。 我能否通过创建一个名为“model”的方法来改进下面的代码呢?

export class MyModel extends Backbone.Model {}

export class MyCollection extends Backbone.Collection {
    constructor() {
        super({model: MyModel});
    }
}

你在进行转译吗?如果是的话,你尝试过使用Babel支持的es7的静态关键字吗?static model = MyModel - Dominic
1
你想要实现什么?Backbone有自己的类机制,只需继续使用它即可。 - user663031
@DominicTobias:我正在使用Babel,我应该在类内声明静态字段吗? 2torazaburo:我正在尝试为一个新的应用程序使用最新的ECMA版本的好框架。 - vania-pooh
1
@vania-pooh 是的,static model = MyModel; 可以替代之前的 model: MyModel - Dominic
2个回答

3

我会使用一个 getter:

export class MyModel extends Backbone.Model {}

export class MyCollection extends Backbone.Collection {
  get model() {
    return MyModel;
  }
}

0
当然,只要不使用 class 关键字即可:
var MyModel = Backbone.Model.extend({});

var MyCollection = Backbone.Collection.extend({
    model: MyModel
});

这段代码实际上比你写的ECMAScript 6版本更具可重用性。ECMAScript 6实际上比原始版本更糟糕。

你必须理解,在JavaScript中,对象可以存在而不需要类,这个特性非常重要。

以下是Douglas Crockford在2008年关于原型继承的观点:http://javascript.crockford.com/prototypal.html


这不是我的踩,但我真的很怀疑。我们为什么需要ECMAScript 6类特性? - vania-pooh
我在许多论坛上问了同样的问题。其中许多人说,这部分是因为人们还没有彻底学习JavaScript。许多前端开发人员来自Java/.Net/PHP世界,在那里函数直到最近才真正成为一等公民。 - Akos K
你说得没错,我们并不需要类语法,并且我会犹豫地建议在大多数用例中使用类语法,但是如果一个应用程序已经在使用Backbone的类系统,那么使用声明性语法绝对不会更差。 - loganfsmyth
@akoskm(我没有投反对票)我想说的是,Backbone 的 .extend 与类语法在行为上是完全相同的,它们是完全兼容的。如果你想争论是否应该将类语法添加到语言中,SO 不是一个好地方。虽然它们在功能上是等效的,但我不同意 "实际上更可重用",因为现在它已经在语言中了,所以使用其中之一完全是代码风格的选择,应该由团队决定。 - loganfsmyth
@loganfsmyth 我的意思不是要争论。如果你看看我的回答,你会发现我倾向于用我已经测试或实施过的建议/想法来扩展我的回答。如果我以前做过研究,让我们把我的发现包含在答案中!我不喜欢仅仅提供问题的答案。有些用户通过点赞来欣赏这一点,有些用户根本不欣赏,而其他人则会点踩。 - Akos K
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接