2017-09-07 11 views
0

JavaScriptは実際にオブジェクトの場合には奇妙な動作をします。私はそれが正しい動作であるかどうかはわかりませんが。JavaScriptオブジェクトは新しいオブジェクトにも以前の値を格納します

新しいObject()の中で、オブジェクトにいくつかのプロパティを設定しました。次回、新しいObject()を再度実行すると、既定値の代わりに以前のインスタンスで設定された値が取得されます。アー。例以下は

がはっきり

function testo() {} 

testo.prototype = { 
    obj: { 
    what: { 
     value: 5 
    } 
    }, 
    done: function() { 
    console.log(this.obj.what.value); 
    this.obj.what = {value: 10}; 
    } 
}; 

var x = new testo(); 
x.done(); 
var y = new testo(); 
y.done(); 

問題を説明し、上記のコードの出力は次のとおりです。 -

5 
10 

私はそれがあることを期待していた: -

5 
5 

なぜ?私は新しいClass()を作成しています。前のインスタンスでは 'this'を使用して値を設定しましたが、静的ではなく、その内部のすべてのオブジェクトのデフォルトプロパティが表示されます。

私はデモとして上記の例を作成しました。私は私の図書館でこの問題に直面しています。私はそれがオブジェクトと関連していることを知っているとして参照として格納されています。

予想される出力を得るにはどうすればよいですか?何かご意見は?

+0

はい、プロトタイピングの全体のポイントは、インスタンスがプロトタイプを共有することです。あなたがそれを望まないなら、プロトタイプのプロパティを作ってはいけません。 – JJJ

答えて

3

クラス内のこのオブジェクトだけにプロトタイププロパティ(すべて同じインスタンス)を移動できます。

function testo() { 
 
    this.obj = { what: { value: 5 } }; 
 
} 
 

 
testo.prototype = { 
 
    done: function() { 
 
     console.log(this.obj.what.value); this.obj.what = { value: 10 }; 
 
    } 
 
}; 
 

 
var x = new testo(); 
 
x.done(); 
 

 
var y = new testo(); 
 
y.done();

関連する問題