-1

オブジェクトが参照によって渡され、関数がオブジェクトである場合、誰かがこの動作を説明できます:

function extendCopy(p){
  var c = {}
  for (var i in p){
     c[i] = p[i];
  }
  c.uber = p;
  return c;
}
var shape = {
   name: "shape";
   toString: function (){ return name; }
}
var twoDee = extendCopy(shape);
twoDee.toString = function() { return "2d shape" }

>>>shape.toString
>>>function (){ return name; }

twoDee.toStringへの単なる参照ではないのはなぜですかshape.toString? 確かc[i] = p[i];に、コピー関数の行は、新しいオブジェクトのプロパティを、コピーされたオブジェクトの同じプロパティへの参照に設定するだけでしょうか?

編集

これは単純化できます。

関数がオブジェクトであり、オブジェクトが参照によって渡される場合、なぜこれは返さ"test"れず、返されないのですか? "modified"3行目で「オブジェクト」(関数)を完全に新しいものに実際に置き換えているからですか?

a.toString = function(){ return "test" };
b.toString = a.toString;
a.toString = function(){ return "modified" };
b.toString();
>>> "test"
4

1 に答える 1