如果對象是通過引用傳遞,和函數是對象,那麼有人可以解釋這種現象:當對象被複制,而不是通過作爲參考」
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"
這個例子是錯誤的; 「約翰」得到迴應。顯示真實的代碼。 – raina77ow
哦,你是對的,讓我調整 –
如果它使用緩存,偶爾會在控制檯中看到錯誤的結果 –