小飼さんのブログでいつも勉強させてもらっているんだけど、今回も興味深い内容が。

http://blog.livedoor.jp/dankogai/archives/51223538.html
-------------------------------------------------------
var spawn = function(o){
var F = function(){};
F.prototype = o;
return new F;
};

var a = {x:'foo', y:'bar'};
var b = spawn(a);
p('a.x is ', a.x, ', b.x is ', b.x, '.');
b.x = 'baz';
p('a.x is ', a.x, ', b.x is ', b.x, '.');
a.y = 'quux';
p('a.y is ', a.y, ', b.y is ', b.y, '.');
-------------------------------------------------------
実行結果
a.x is foo, b.x is foo.
a.x is foo, b.x is baz.
a.y is quux, b.y is quux.

これに以下を追加してみた。
a.x = "ccc";
p('a.x is ', a.x, ', b.x is ', b.x, '.');
結果
a.x is ccc, b.x is baz.

b.xは書き換わらない。
つまり、b.xについては b.x = 'baz' を行った時点でbの中に新しくxが生成されているということだな。

とっても勉強になる。