function Demo() {
this.show1 = function() { alert(1) }
}
Demo.prototype.show2 = function() { alert(2) }
var d = new Demo
d.show1()
d.show2()
show1
show2
両方のアラート番号をすることができます。
これら2つの間に違いはありますか?
function Demo() {
this.show1 = function() { alert(1) }
}
Demo.prototype.show2 = function() { alert(2) }
var d = new Demo
d.show1()
d.show2()
show1
show2
両方のアラート番号をすることができます。
これら2つの間に違いはありますか?
はい、コンストラクター内でそのメソッドを初期化すると、たとえば(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()
show1
新しいインスタンスごとに複製されます。show2
共有されます。