我在网页的javascript中有以下模块模式:
var swf_debugger = swf_debugger || {};
(function($, swf_debugger) {
swf_debugger.pageSetup = (function() {
var
swfType = null,
formData = {},
// ... unimportant code continues ...
initChangeEvents = function() {
$.each(formElements, function(index, $el) {
if ($el.hasClass("swfToLoad")) {
// THIS EVENT IS WHERE I MAKE THE ASSIGNMENT TO 'swfType'
$el.change(function() {
swfType = $("option:selected", this).val();
console.log("swfToLoad has triggered");
console.log(swfType);
});
return;
}
// NO ISSUES HERE WITH THESE EVENTS...
switch($el.prop("tagName")) {
case "SELECT":
$el.change(function() {
formData[$el.attr('id')] = $("option:selected", this).val();
});
break;
case "INPUT":
switch ($el.attr('type')) {
case "text" :
$el.change(function() {
formData[$el.attr('id')] = $(this).val();
});
break;
case "checkbox" :
$el.change(function() {
formData[$el.attr('id')] = $(this).prop("checked");
});
break;
default:
}
break;
default:
}
});
},
init = function() {
$(function() {
addFormComponents();
populateDropdowns();
initCachedData();
initChangeEvents();
});
};
init();
return {
swfType: swfType,
formData: formData
};
}());
}($, swf_debugger));
本质上,我将事件附加到一系列jquery选定元素,回调只是将特定表单元素的内容(特别是select,text和checkbox元素)存储在变量或对象中。
我知道我的事件是正确附加的,因为当我向他们添加console.log
语句时,我可以看到它们被触发。此外,每当我在控制台中调用swf_debugger.pageSetup.formData
时,我都会看到每个事件都填充的对象的有效内容,因此这些事件正在按照它们的预期进行。
每当我尝试访问swf_debugger.pageSetup.swfType
时,我的麻烦都会发生,它总会返回null
而我不明白为什么。我知道提供此值的特定事件正在触发,我知道至少在回调的函数范围内,swfType
是有效的,因为我的console.log
语句中返回了什么。但是,每当我尝试通过闭包访问swfType
的内容时(即在控制台中键入swf_debugger.pageSetup.swfType
),它总是返回null。
我猜我正在考虑传递的对象引用和传递的变量值之间的区别,但我不确定。有人可以帮助我,并解释为什么swfType
总是通过关闭返回null
。
答案 0 :(得分:1)
为什么swfType总是返回null
因为这是您分配给属性的值(来自swfType
变量,该变量在赋值时具有该值)。属性不是对分配给它的变量的引用 - 您只能分配一个值。
你能做什么:
swfType
变量的值swf_debugger.pageSetup
对象的属性