3

基本関数を呼び出しながらプロトタイプ関数をオーバーライドし、そのコンストラクターを継承する方法は、以下で行っている以外にありますか?

function MyFoo(name) {
    this.name = name;
}
MyFoo.prototype.sayName = function() {
    alert("Hi, my name is " + this.name + ".");
}

MyBar.constructor = MyFoo;
MyBar.prototype = new MyFoo();

function MyBar(name) {
    MyFoo.apply(this, arguments);
};

MyBar.prototype.sayName = function() {
    MyFoo.prototype.sayName.call(this);
    alert("It's nice to meet you!");
}

var fooJim = new MyFoo("Jim");
var barJake = new MyBar("Jake");

fooJim .sayName();
barJake .sayName();

これは問題なく機能しますが、もっと効率的な方法があるかどうか知りたいだけです。

4

1 に答える 1

2

いいえ、クラスの継承をエミュレートするためのアプローチは、JavaScript言語のミニマリストが許す限り本質的にです。

アプリケーションでクラス継承を大量に使用し、冗長なコードを最小限に抑えたい場合は、次のいずれかを実行できます。

  • 「クラス」を操作するための独自のユーティリティメソッドのセットを作成します。
  • または、「javascript oopframeworks」をグーグルで検索して、ニーズに適したライブラリを見つけてください。

また、この本にアドバイスするのも仕方がありません(スパムと見なされないことを願っています):StoyanStefanovによる「JavaScriptPatterns」。javascriptでクラスの継承をエミュレートするためのさまざまな技術に関する非常に優れた章があります。

于 2012-11-16T22:25:37.997 に答える