JavaScript如何在命名空间内部使用类

时间:2012-08-15 11:51:28

标签: javascript

我想在我的命名空间中定义一个类类型,但我想不出怎么做才能让'this'命令引用类的实例而不是命名空间的'this'。

如果我提供我需要执行此操作的示例,那将更有意义。我正在创建一些JavaScript代码来转换所有表单以通过Ajax提交,然后如果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);

1 个答案:

答案 0 :(得分: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构造函数中的Request是错误的对象,因为您使用new调用构造函数,所以不会有问题。