2011-08-23 4 views
1
function A(){} 
var B = {}; 

var a1 = new A(); 
var a2 = new A(); 
var b1 = B; 
var b2 = b1; 

A.prototype.prop = "A's Property"; 
b1.prop = "B's Property"; 
a1.prop = "Not Prop"; 
alert (a1.prop + " not equal to " + a2.prop); 
b2.prop = "Not Prop"; 
alert (b1.prop +" still equal to "+ b2.prop); 

ご覧のとおり、b2.propは値渡しできません。プロパティ名を変更せずに値渡しする方法はありますか?参照によって同じオブジェクトプロパティに値を渡すことはできませんか?

+1

を?通常、「渡す」とは、関数に引数を渡すことを意味します。あなたは関数を定義していないので、おそらくあなたが意味するものではありません。 – zneak

答えて

0

は、cloneメソッドを定義します

function clone(o) { 
    if(!o || 'object' !== typeof o) { 
     return o; 
    } 
    varc = 'function' === typeof o.pop ? [] : {}; 
    var p, v; 
    for (p in o) { 
     if (o.hasOwnProperty(p)) { 
      v = o[p]; 
      if (v && 'object' === typeof v) { 
       c[p] = clone(v); 
      } else { 
       c[p] = v; 
      } 
     } 
    } 
    return c; 
} 

をして、あなたのb1オブジェクトクローンを作成するためにそれを使用する:あなたは "値渡し" のあなたの概念を明確にすることができ

var b1 = B; 
var b2 = clone(b1); 
3

b1b2の値をpropと異なるように指定していますか?あなたがそれをやっているので、あなたはできません。 b1およびb2は同じオブジェクトを参照します。それぞれに新しいオブジェクトを作成する必要があります。

var b1 = {}; 
var b2 = {}; 
// b1 and b2 can have independent prop values now 
+0

はい、新しいオブジェクトを作成しないとできますか? – Kitty

+2

いいえ。オブジェクトの1つのインスタンスは、1つのプロパティに対して同時に2つの値を持つことはできません。 – lincolnk

+0

hmmm ...だから、 'prototype'がもっと強力なのです – Kitty

0

あなたはBにだけ言及しているb1b2を割り当てています。

b1のクローンにb2を割り当てて、別のプロパティバッグを付ける必要があります。

関連する問題