2017-02-15 9 views
0

私はグーグルで、これについてもStack Overflowの答えをチェックしました。しかし、私はこれについて明確に理解できません。誰も簡単に次の例を説明するのを助けることができますか?上記のコードでこれはプロトタイプとJavascriptとの比較

function myObject(){ 
    this.iAm = 'an object'; 
    myObject.prototype.values = "value"; 
    this.whatAmI = function(){ 
     alert('I am ' + this.iAm); 
    } 
} 
var myObject1 = new myObject(); 
myObject1.values = "value2"; 
myObject1.iAm = "New"; 

alert(myObject1.values); 


var myObject2 = new myObject(); 
alert(myObject1.values); 

Iはthis.iAmを使用する場合、それは、プロトタイプの動作と同じように振る舞います。

私はJavascript Object Oriented Programmingを初めて利用しています。

私は多くのダウン票を期待しています。しかし、私はそれを心配していません、なぜなら、私はまだわかりやすく簡単な説明をしたいからです。

+0

私は理解できませんでした.. :( –

+0

あなたの疑問は何ですか?あなたはmyObject1の 'values'プロパティを返す' myObject1.values'を警告しようとしています。 – Agalo

+0

どのようにこのプロトタイプは異なりますか? –

答えて

1

私はあなたの実際の懸念を推測/解決しようとします。

は、以下のコードを参照してください

function A() { 
    this.text = "hello"; 
} 

var a = new A(); 
a.text = "hello world"; 

は実際コンストラクタ(すなわちthis.text)関数またはオブジェクトが既に作成された後(即ちa.text)内部textプロパティを設定するとの間の唯一の違いがあります。基本的には、コンストラクタ関数内のthisは作成されるオブジェクトであり、変数はすでに作成されたオブジェクトです。a

2つの唯一の違いは、コンストラクタ関数の呼び出し中に作成されるオブジェクトで定義されたプロパティが、コンストラクタ関数全体によって作成されたすべてのオブジェクトに対して作成されるという点です。

function A() {} 
A.prototype = { 
    text: "hello" 
}; 

var a1 = new A(); 
var a2 = new A(); 

// both will output "hello" 
console.log(a1.text); 
console.log(a2.text); 

A.prototype.value = "bye"; 

// both will output "bye" 
console.log(a1.text); 
console.log(a2.text); 

結論:コンストラクタ関数のプロトタイプで定義されたプロパティが同じプロトタイプを共有するすべてのオブジェクトによって共有される

今すぎる次のコードスニペットを参照します。したがって、たとえコンストラクタ関数を使ってオブジェクトを作成しても、それらは生きています。

関連する問題