inheritance - 如何在使用 Coffeescript 时扩展主干模型并保持默认值

标签 inheritance backbone.js coffeescript default-value

鉴于我在 coffeescript 中有以下继承。

我得到一个错误,因为“哺乳动物”似乎没有为 myCat 定义。

我在其他一些帖子中读到,我实际上必须将 defaults 设置为一个函数来继承默认值。但是我如何使用 coffeescript 做到这一点?

class Animal extends Backbone.Model
  defaults:
    mammal: true

class Cat extends Animal
  defaults:
    furColor: "gray"

myCat = new Cat
alert(myCat.get('mammal'))

最佳答案

最简单的方法是为 defaults 使用函数,然后你的 Cat 可以简单地调用 super 并添加一些东西:

class Animal extends Backbone.Model
  defaults: ->
    mammal: true

class Cat extends Animal
  defaults: ->
    _(super()).extend(furColor: "gray")

您可以在 Animal 中保留非功能性 defaults,但这会变得丑陋,所以请不要打扰。

请注意 _.extend改变它的第一个参数,所以通常你想说类似 _({}).extend(...) 的东西,以避免在你不拥有的东西上涂鸦。在这种情况下,您知道每次调用 Animal#defaults 时都会返回一个全新的对象,因此您不必担心。如果你是偏执狂,你可以这样做:

defaults: ->
  _({}).extend(super(), furColor: 'gray')

演示:http://jsfiddle.net/ambiguous/LETAc/

关于inheritance - 如何在使用 Coffeescript 时扩展主干模型并保持默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14524276/

相关文章:

php - 从父级调用覆盖的静态方法

java - 子类是否继承私有(private)字段?

javascript - 类似下划线的 API 文档

ruby-on-rails - Rails 3 Controller 收到空参数,但只有在上传 ajax 文件后才会收到空参数

java - Main 不会从相应的类中提取信息。继续产生错误

Backbone.js 和 Jasmine Spys 没有被调用

javascript - 一旦不再需要 View ,取消委托(delegate)事件的最佳方式

javascript - 使用 coffeescript 默认包装器访问文档

javascript - 如何使用 Multer 验证 Express 中文件上传的大小?

java : advanced inheritance to jpa