1

私はこのコードを持っています:

var Class = function(){ // function constructor
this.className = 'Class';
}
Class.prototype.method = function(){ // open method
alert('method of ' + this.className);
}

var ClassSub = function(){ // function constructor of sub class
this.className = 'ClassSub';
}
ClassSub.prototype = new Class(); 

var objSub = new ClassSub(); 
objSub.method(); 

そして、私には1つの質問があります: Class.prototype.method = function(){ // open method

そのように書くとき、クラスのプロトタイプにはこのメソッドがあると言います。したがって、彼のサブクラスにはこのメソッドがあります。しかし、私が理解できないのは、なぜ私たちがただ書くことができないのかということです

Class.method = function()
4

2 に答える 2

1

Class.method = function () {};

methodこれは、コンストラクター関数にプロパティを追加するだけClassです。関数はオブジェクトであり、他のオブジェクトと同様にデータを保持できます。ただし、method関数をClassインスタンスに追加しない理由は単純です。それは、プロトタイプの継承が JavaScript でどのように実装されているかではありません

JavaScript の 'new' キーワードとは何ですか?について読む必要があります。また、プロトタイプ チェーンがどのようにセットアップされているか、およびメンバーをコンストラクター関数に追加しても、このコンストラクターを使用して作成されたインスタンスに影響しない理由を理解できます。

コンストラクターのコードClassSub.prototype = new Class();を実行するため、プロトタイプチェーンを設定する効率的な方法ではないことにも言及する価値があると思います。Class

最新のブラウザでは簡単に使用できObject.create、古いブラウザ用の shim があります。

ClassSub.prototype = Object.create(Class.prototype);

于 2013-10-27T20:11:42.497 に答える