0

名前空間内でクラスタイプを定義したいのですが、「this」コマンドが名前空間の「this」ではなくクラスのインスタンスを参照するように、これを行う方法を考えることができません。

これを行う必要がある例を提供すると、より意味があります。代わりに、すべてのフォームをAjax経由で送信するように変換するJavaScriptコードを作成しています。その後、Ajaxリクエストが失敗した場合、一定期間後にフォームを再送信しようとします。ユーザーのインターネット接続が切断されてもページが機能するように考えています。

コード

// Add event handlers to capture form submit events here (code not shown)

// Use this object as a namespace
var AjaxStack_f = function () {}

// Use this as a struct/class for defining requests (This is what I don't like)
function Request(url, data, method) {
    this.url = url;
    this.data = data;
    this.method = method;
}

// The stack of Requests
AjaxStack_f.prototype.stack = [];

// Push a Request on to the stack
AjaxStack_f.prototype.push = function(request){
    this.stack.push(request);
}

// Provide instance
var AjaxStack = new AjaxStack_f();

上記を使用して、このコードでやりたいことができます

var request1 = new Request("www.example.com", { value: 1 }, "get");
var request2 = new Request("www.anotherurl.com", { value: 2 }, "get");
AjaxStack.push(request1);
AjaxStack.push(request2);

代わりにこのようなことを実行できるように、RequestクラスをAjaxStack名前空間内に配置するにはどうすればよいですか?

var request1 = new AjaxStack.Request("www.example.com", { value: 1 }, "get");
var request2 = new AjaxStack.Request("www.anotherurl.com", { value: 2 }, "get");
AjaxStack.push(request1);
AjaxStack.push(request2);
4

1 に答える 1

2

あなたはこれを行うことができます:

var AjaxStack_f = function () {}

AjaxStack_f.prototype.Request = function(url, data, method) {
    this.url = url;
    this.data = data;
    this.method = method;
}

次に、あなたは言うことができます:

var AjaxStack = new AjaxStack_f();
var request1 = new AjaxStack.Request("www.example.com", { value: 1 }, "get");

でコンストラクターを呼び出しているため、コンストラクターthis内で間違ったオブジェクトであることに問題はありません。Requestnew

于 2012-08-15T12:01:29.373 に答える