この質問にタイトルを付ける方法がわかりませんでしたが、コンストラクターで明らかにするモジュールパターンを使用していて、混乱する動作に気付きました。このコードの実際の目的は、私の質問とは無関係です。私が見たこの動作を理解したいだけです。
問題があったコードは次のとおりです。
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() コマンドで undefined が表示されました。
問題は、パラメーター名がローカル変数と同じであることがわかりました。次のようなことをして問題を解決しました。
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の動作は何ですか?