2
Ajax.use
では、コールバック関数内でコールバック関数を指します。モジュールパターン内のコールバック関数で 'this'と呼ばれるもの
しかし、コールバック定義の外にあるthis
は、Ajaxの特定のインスタンスを参照します。
これは、this
をAjax.invoke
- >this.use()
に置き換えて、別のメンバーメソッドからメンバーメソッドを呼び出す方法です。
コールバック関数の内部でメンバーメソッドを呼び出す必要があります。
私は推測して
this.invoke()
に置くが、私は」それがコールバック関数であるとして、これは正しいオブジェクトを参照していると思ういけません。私はそれがコールバック関数オブジェクトを指すと思います。
/**
* Ajax
*/
var Ajax = (function()
{
var Ajax = function (element)
{
this.object = this.create();
};
Ajax.prototype.create = function()
{
var request;
try
{
request = new window.XMLHttpRequest();
}
catch(error)
{
try
{
request = new window.ActiveXObject("Msxml2.XMLHTTP");
}
catch(error)
{
try
{
request = new window.ActiveXObject("Microsoft.XMLHTTP");
}
catch(error)
{
request = false;
}
}
}
// alert("Object Created Successfully");
return request;
};
Ajax.prototype.use = function(param, ajax_func)
{
alert("Ajax.prototype.use Called");
this.object.open("POST", Global.GATEWAY, true);
this.object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
this.object.setRequestHeader("Content-length", param.length);
this.object.setRequestHeader("Connection", "close");
this.object.onreadystatechange = function()
{
if(this.readyState === 4)
{
if(this.status === 200)
{
ajax_func(this.responseText);
return true;
}
else
{
this.invoke(param, ajax_func);
return false;
}
}
};
this.object.send(param);
return true;
};
Ajax.prototype.invoke = function(param, ajax_func)
{
var state = false,
count = 1;
while(state === false && count <= 5)
{
if(count !== 1)
{
alert('Ajax Object Use Failed | Try Again ');
}
state = this.use(param, ajax_func);
count++;
}
return state;
};
return Ajax;
}());
「自己」は魔法ではありません。私はself = thisをコールバックの外側に定義しました。 – Prestaul
http://www.javascriptkata.com/2007/05/14/how-to-use-the-self-with-object-oriented-javascript-and-closures/ –
申し訳ありませんが...私はそれを逃した...私はそれがPHPのようなキーワードだと思った... –