Javascript继承模式

Javascript继承模式,javascript,object,design-patterns,Javascript,Object,Design Patterns,我正在用Javascript编写域对象,其中填充了数据库字段。假设我有两个对象dog和cat,我有以下构造函数定义: function Dog(opt_data) { var data = opt_data || {}; this.createdAt = data['created_at']; this.updatedAt = data['updated_at']; this.name = data['name']; this.breed = data['breed'];

我正在用Javascript编写域对象,其中填充了数据库字段。假设我有两个对象
dog
cat
,我有以下构造函数定义:

function Dog(opt_data) {
  var data = opt_data || {};

  this.createdAt = data['created_at'];
  this.updatedAt = data['updated_at'];
  this.name  = data['name'];
  this.breed = data['breed'];
}


function Cat(opt_data) {
  var data = opt_data || {};

  this.createdAt = data['created_at'];
  this.updatedAt = data['updated_at'];
  this.name = data['name'];
  this.fur  = data['fur'];
}
现在,上述两个对象都具有
craetedAt
updatedAt
属性。那么,我应该创建一个新类
BaseModel
,该类有三个属性,并让所有对象继承这些属性,还是在javascript中有更好的替代方案来实现这个模式

更新1:

我的理解来自于评论和回答

function Cat(opt_data) {
  var data = opt_data || {};


  this.name = data['name'];
  this.fur  = data['fur'];

  this.updateTimestamp(data);
}
Cat.prototype = Object.create({
  updateTimestamp: function(data) {
    this.createdAt = data['created_at'] || new Date();
    this.updatedAt = data['updated_at'] || new Date();
  }
});

除非
createdAt
updatedAt
值有一些您需要在
Dog
Cat
对象上定义的常用支持方法或访问器,否则只需将属性设置为您需要的任何值即可

<>因为你没有在JavaScript中声明对象成员(你在C++,C,java,Java等中的方式),在你提出的情况下,继承从<代码>基础模型原型没有什么可取之处。这就是说,由于您不必在JavaScript中执行任何操作来创建
createdAt
updatedAt
属性,而只需简单地分配给它们,因此基类型实际上没有提供任何有用的功能,因为您只需在基类型构造函数中分配这些属性


如果两个对象都需要类似的方法来保存和加载数据(可能在保存时自动更新
updatedAt
属性),则可能需要基本类型。在这种情况下,为
Dog
Cat
提供一个带有保存和加载方法的原型将是原型继承模式的一个有用应用。

上述两个对象的craetedAt和updatedAt属性都不在您发布的代码中。除非您发现需要其他内容,去做简单的鸭子打字。@Bergi你能给我举个例子吗?@CodeYogi你已经做了,你的代码很好。如果您不这么认为,请告诉我们您需要如何处理实例。@Bergi您可以看到我在创建的每个对象上都有一组公共属性,您不认为这是一个重复的代码并且容易出错吗?如果有更多具有相同属性的对象,你不认为我们将编写重复的代码吗?@vivek这将是一个帮助函数的例子,该函数设置现有对象的属性。原型继承模型对这种特定情况没有任何用处。@cdhowie坦率地说,我仍然无法理解这一点,也许我无法摆脱经典继承模式。@CodeYogi这是许多试图学习JavaScript的开发人员的绊脚石。您可能会遇到的问题是,在许多具有经典继承的语言中,您必须声明类上的每个属性。JavaScript根本没有类,它只有对象。您不必声明某个属性存在,只需分配给它,当您这样做时,它就会出现。@cdhowie我不记得了,但我在某个地方读过,在构造函数中定义属性会导致优化代码。