我不知道如何为这个问题命名,但我将揭示模块模式与构造函数一起使用,并注意到一些让我感到困惑的行为。这段代码的实际目的与我的问题无关,我只想了解我看到的这种行为。
这是我遇到问题的代码:
var ajaxModule = (function() {
//private
var data,callBack,type,dataType,url,
//public
constructor;
constructor = function(callBack,data,type,dataType,url) {
//Required
callBack = callBack || null;
data = data || null;
//Defaults
type = type || 'POST';
dataType = dataType || 'json';
url = url || 'DBConnect.php';
};
//methods
function setAjaxQuery() {
log('in setAjaxQuery')
dir(callBack);
dir(data);
dir(type);
dir(dataType);
dir(url);
};
constructor.prototype = {
constructor: ajaxModule,
setAjaxQuery: setAjaxQuery,
};
return constructor;
}());
现在调用它:
var ajax = new ajaxModule('someObject','someData');
ajax.setAjaxQuery();
现在这样做我看到 setAjaxQuery 函数中所有这些 console.dir() 命令的未定义。
我发现问题是参数名称与局部变量相同。我通过执行以下操作解决了这个问题:
constructor = function(zcallBack,zdata,ztype,zdataType,zurl) {
//Required
callBack = zcallBack || null;
data = zdata || null;
//Defaults
type = ztype || 'POST';
dataType = zdataType || 'json';
url = zurl || 'DBConnect.php';
}
我的问题是为什么会发生这种情况?当名称相同时,javascript 在做什么会导致此问题?