2

プロトタイプのareaメソッドを使用した単純な円クラスの次の例を参照してください。

var Circle = function(radius) {
    this.radius = radius;
}

Circle.prototype.area = function() {
   return Math.PI*this.radius*this.radius;
}

上で宣言されたarea関数と、そもそもCircleのパブリックメソッドとして宣言されたばかりの場合の違いは何ですか?いずれにせよ、円の個々のインスタンスには独自の領域がありますね。違いは何ですか?

this.area = function(){return Math.PI*this.radius*this.radius;}
4

3 に答える 3

3

コンストラクター内で宣言すると、のすべてのインスタンスにCircle関数の個別のコピーがあります。Circleすべてのオブジェクトが同じコードを共有する可能性があるため、これはリソースの浪費になります。

于 2013-02-20T19:29:55.250 に答える
3

this.area = function(){}新しい関数を作成し、それをのareaプロパティに割り当てますthisCircle.prototype.area = function(){}関数を一度作成し、コンストラクターprototypeによって作成されたオブジェクトのに割り当てます。Circle()

于 2013-02-20T19:29:26.570 に答える
1

this関数オブジェクトのインスタンスを指し、インスタンス.prototypeを作成した関数コンストラクターを「指します」(1つだけです)。通常、古典的な継承では、クラスはオブジェクトインスタンスを作成します。しかし、JavaScriptではクラスがないため、「関数コンストラクター」がオブジェクトインスタンスを作成します。「関数オブジェクト」と言われることもあります。

于 2013-02-20T19:35:35.850 に答える