这是一个很好的方式来做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;