这是一个很好的方式来做Javascriptinheritance?

可能重复:
这里使用“新”关键字的原因是什么?

我正在学习mongoose(这是一个多么美丽的软件…),我看到了这个:

function Model (doc, fields, skipId) { Document.call(this, doc, fields, skipId); }; /*! * Inherits from Document. */ Model.prototype.__proto__ = Document.prototype; 

哇,这是设置我见过的inheritance最简单的方法。 我知道这不能用浏览器来完成,但是服务器端…它看起来像一个赢家:

  • 派生类将调用父类的构造函数
  • 派生类的原型对象被设置为proto指向父类的原型。

而就是这样!

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

那么,有一些浏览器的工厂通过让A.prototype = new B()来模仿这一点,但是这有点冒险:)这两种方式的一个重要的收益是,猴子修补的父类使后代能够使用新的/改变的方法(不是A.prototype = $.extend({}, B.prototype)和类似的黑客)。

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

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

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