这是在Javascript中继承的好方法吗?

时间:2012-11-09 02:10:49

标签: javascript node.js inheritance

  

可能重复:
  What is the reason to use the ‘new’ keyword here?

我正在研究Mongoose(这是一个很漂亮的软件......),我看到了这个:

function Model (doc, fields, skipId) {
  Document.call(this, doc, fields, skipId);
};

/*!
 * Inherits from Document.
 */
Model.prototype.__proto__ = Document.prototype;
哇,这是我见过的最简单的继承方式。我知道它不能用浏览器来完成,而是服务器端...它看起来像赢家:

  • 派生类调用父类的构造函数
  • 设置派生类的原型对象,以便 proto 指向父类的原型。

就是这样!

这可能是在服务器端实现继承的最简洁,最简单的方法吗?我问,因为我爱上了它,我想知道我是否缺少一些限制/问题......?

2 个答案:

答案 0 :(得分:1)

好吧,有些浏览器的franeworks过去通过A.prototype = new B()来模仿这个,但这有点hacky :)两种方式的一个重要好处是猴子修补父类使后代能够使用新的/更改的方法父母(A.prototype = $.extend({}, B.prototype)和类似的黑客不是这种情况)。

至于所描述的方法,它肯定看起来更干净,所以我会投票赞成“是”

答案 1 :(得分:0)

据我所知,这可以在客户端完成,如:

Model.prototype = new Document();
Model.prototype.constructor = Model;