2016-11-20 92 views
-2
var fields = {date:{type:'date'}};  
var createField = function(field, settings) 
{ 
    var myArgs = {}; 
    myArgs = fields[field]; 
    console.log(fields[field]); 
    console.log(myArgs); 
    console.log(settings); 
    if('label' in settings && settings.label) myArgs.label = settings.label; 
    // write html 
    var html = ''; 
    myArgs = null; 
    return html; 
} 
var type = 'date'; 
createField(type, {label:'Date of Birth'}); 
// log prints no "label" in fields[field] or myArgs, but does in settings 
createField(type, {}); 
// log prints label of "Date of Birth" in both fields[field] and myArgs, but not in settings 

WTF?物件屬性未被清除

換句話說,我的函數從頭開始創建一個變量,我沒有在我的代碼中使用任何其他地方:myArgs。它從頁面頂部的不變聲明中抓取有關字段的參數。如果傳遞給函數的settings有一個標籤,它將標籤添加到myArgs變量。然後在返回退出功能之前,我清除了myArgs

label它第一次在settings通過,即使它不被隨後settings通過後,每一次顯示了在myArgs

EDIT FTR,label絕不應該myArgsfields[field]打印。它不存在於後者中,並且在前者的印刷時不應該存在。

* UPDATE * 小提琴:https://jsfiddle.net/Lxqvt6mk/2/

+1

Thom,你的代碼不起作用。粘貼可運行的代碼。使用片段。 –

+0

在寫出問題的簡化版本以節省時間時,我不小心鍵入了'和'而不是'&&'。我也忘了定義'html',因爲它被包含在我的'// html html'註釋中(再次,爲了節省您的時間)。這是一個js小提琴,它完全證明了我的問題,在做出這些小小的兩個更正之後:https://jsfiddle.net/Lxqvt6mk/2/ –

回答

0

分配fields.datemyArgs然後修改myArgs。由於maArgs引用它,因此修改myArgs正在修改fields.date。這是一個對象。當你將它分配給一個變量時,它不會被複制。你只有兩個引用到內存中的同一個對象。您可以在調用函數之前和之後比較fields的值。

下一次,請在粘貼之前檢查您的代碼。最好的解決方案是插入一個可運行的代碼片段。

祝你好運!