2

重複の可能性:
ここで「new」キーワードを使用する理由は何ですか?

私はマングース(なんて美しいソフトウェア...)を研究していて、これを見ています:

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()が、これは少しハックです :) 両方の方法の重要な利点の 1 つは、親クラスにモンキー パッチを適用することで、子孫が親の新しい/変更されたメソッドを使用できるようになったことです (これはそうではありません)。と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 に答える