如果对象是通过引用传递的,而函数是对象,那么有人可以解释这种行为:
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"