2
function Demo() {
   this.show1 = function() { alert(1) }
}

Demo.prototype.show2 = function() { alert(2) }

var d = new Demo
d.show1()
d.show2()

show1show2両方のアラート番号をすることができます。

これら2つの間に違いはありますか?

4

2 に答える 2

6

はい、コンストラクター内でそのメソッドを初期化すると、たとえば(this.method = function () {};)のように、1000個のオブジェクトインスタンスすべてが独自のプロパティとして関数オブジェクトを持ちます。

これが最も軽量な方法です。たとえば、特定のコンストラクターのプロトタイプにメソッドがあり、1000個のオブジェクトインスタンスを作成すると、それらのオブジェクトはすべてプロトタイプチェーンにメソッドが含まれ、すべてが参照するだけになります。 1つの関数オブジェクト。

2番目のケースでは、の後に作成されるオブジェクトのみDemo.prototype.show2 = function(){alert(2)}がコードを取得します。:)

あなたのコード

function Demo(){
   this.show1 = function(){alert(1)}
}

Demo.prototype.show2 = function(){alert(2)}

var d = new Demo
d.show1()
d.show2()

その他の場合

function Demo(){
   this.show1 = function(){alert(1)}
}

var d = new Demo

Demo.prototype.show2 = function(){alert(2)}

d.show1()
d.show2()
于 2012-10-07T07:02:22.287 に答える
2

show1新しいインスタンスごとに複製されます。show2共有されます。

于 2012-10-07T07:01:15.763 に答える