2012-07-26 73 views
2

我想直接更新該函數的範圍內的函數參數引用的對象。舉個例子:javascript Object.assign()的功能

var thisObj = { "val" : "original value" }; 
function modFunc(objRef) { 
    objRef = { "val" : "modified" }; 
    console.log(objRef); // { "val" : "modified" } 
} 
console.log(thisObj); // { "val" : "original value" }; 

我理解爲什麼會這樣,我意識到,我可以用

objRef.val = "modified"; 

內modFunc進行修改。對於我的項目,雖然具體原因,我想是能夠完成這樣的:

function modFunc(objRef) { 
    objRef.self = { "val" : "modified" }; // Of course this will not work, 
    // but is there an Object property or method that allows one to access 
    // the actual memory pointer being referenced by the variable? 
} 

在那裏我可以指定我想直接修改thisObj引用新的對象,我實例中modFunc。這可能嗎?我知道有像Object.assign()這樣的工具可以用來做這件事,但它不是普遍支持的,或者像bind()這樣的庫工具,如果我導入了庫,我可以使用它,但它看起來好像可能有一些本地語法,這將允許我這樣做,我只是一直無法找到它?..

我花了一些時間看,否則我儘量不要問這樣的問題。我也知道還有其他類似的帖子,但這並不完全像我所要求的,我沒有'名譽'這裏能夠直接回復帖子等,所以我沒有看到一個簡單的重點討論的方式。無論如何,感謝您的幫助!

回答

2

你所要求的基本上是一個呼叫參考機制,或顯式創建一個變量的引用的能力。在JavaScript中,這是不可能的。你可以(如你注意的)傳遞對象的引用,並使用它們修改對象屬性值(甚至添加和刪除屬性),但這不完全相同。

+0

好的,謝謝你,這正是我所問的。我只是希望有辦法做到這一點,比我一直在考慮的解決方法更直接一點。我想我會把它放在那裏,看看是否有人有一個直接的解決方案。感謝您的回覆! – jtrick 2012-07-26 19:54:27

+0

[https://groups.google.com/group/comp.lang.javascript/msg/d11c1e0674e0be28]涉及'arguments'對象,它允許通過引用調用機制,但它是這裏沒有用。 – 2012-07-26 20:17:14

+0

@ScottSauyet哇,那個線程... – Pointy 2012-07-26 20:23:32

1

這將是真正的JavaScript引用不支持的賦值。它只是支持錯誤的,被誤解的參照類型。

+0

好的謝謝。我想我只能在一個比我所希望的要少一點優雅的解決方案中工作。 – jtrick 2012-07-26 19:56:12

0

既然你不能處理引用,你可以簡單地把objRef作爲一個全局變量,而不是將它作爲arg傳遞。那麼你正在更新原始對象。

+0

我很欣賞反饋,儘管在這種情況下我需要保護內存位置免受潛在的外部訪問。我最初有一個封閉的封裝的整個對象結構,並直接從'modFunc'(基本上是你所指的相同的機制)'thisObj'。在不同的情況下,你的建議可能會很有幫助;謝謝您的幫助。 – jtrick 2012-07-26 19:59:00