2

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

我正在研究 Mongoose(多么漂亮的软件......)并且看到了这个:

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

/*!
 * Inherits from Document.
 */
Model.prototype.__proto__ = Document.prototype;

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

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

就是这样!

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

4

2 回答 2

1

好吧,一些浏览器的框架过去常常通过具有来模仿这一点A.prototype = new B(),但这有点hacky :) 两种方式的一个重要收获是猴子修补父类使后代能够使用父类的新/更改方法(事实并非如此和A.prototype = $.extend({}, B.prototype)类似的黑客)。

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

于 2012-11-09T02:22:46.647 回答
0

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

Model.prototype = new Document();
Model.prototype.constructor = Model;
于 2012-11-09T02:16:54.563 回答