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
показывает в myArgs
каждый раз после того, как первый раз она прошла в settings
, даже если она не передается последующим settings
.
EDIT FTR, label
никогда не должны быть напечатаны в myArgs
или fields[field]
. Он не существует в последнем и не должен существовать YET во время печати в первом.
* UPDATE * Fiddle: https://jsfiddle.net/Lxqvt6mk/2/
Thom, ваш код не работает. Вставьте исполняемый код. Используйте фрагмент. –
Я случайно набрал 'и' вместо' &&' при написании упрощенной версии проблемы, чтобы сэкономить ваше время. Я также забыл определить 'html', потому что он был включен в мой комментарий' // write html' (опять же, чтобы сэкономить ваше время). Вот сценарий js, который точно демонстрирует мою проблему, после внесения этих минимальных поправок: https://jsfiddle.net/Lxqvt6mk/2/ –