当我的服务器收到请求时,我创建了一个调度程序,它创建了一个路由器并向我的路由器询问我的调度员需要的控制器,所以我发送一个URL给我的路由器和一个包含每个路径的数组。我的路由器将控制器发送给我的调度员,我的调度员调用控制器index() func...
所以我的问题是,当我初始化我的控制器时,我的控制器被最后一个控制器覆盖。有人可以告诉我为什么吗?
这是我的路由器,我创建了一个带有日志的小代码来显示问题:
function Router(){
log(colors.green+"Router initialization...")
this.indexController = new (require("../controllers/index"))();
log(this.indexController.constructor.name);
this.notFoundController = new (require("../controllers/notFound"))();
log(this.notFoundController.constructor.name);
this.publicController = new (require("../controllers/public"))();
log(this.publicController.constructor.name);
this.faviconController = new (require("../controllers/favicon"))();
log(this.faviconController.constructor.name);
this.registerController = new (require("../controllers/register"))();
log(this.registerController.constructor.name);
log(colors.green+"Router initialization successful")
log(this.indexController.constructor.name);
log(this.notFoundController.constructor.name);
log(this.publicController.constructor.name);
log(this.faviconController.constructor.name);
log(this.registerController.constructor.name);
}
控制台日志:
Log(21:9:4): Router initialization...
Log(21:9:4): IndexController
Log(21:9:4): NotFoundController
Log(21:9:4): PublicController
Log(21:9:4): FaviconController
Log(21:9:4): RegisterController
Log(21:9:4): Router initialization successful
Log(21:9:4): RegisterController
Log(21:9:4): RegisterController
Log(21:9:4): RegisterController
Log(21:9:4): RegisterController
Log(21:9:4): RegisterController
为什么我的变量会被覆盖?
register.js:
function RegisterController() {}
RegisterController.prototype = Controller.prototype;
RegisterController.prototype.constructor = RegisterController;
RegisterController.prototype.index = function(content) {
if (content.req.method == "POST") {
content.res.writeHeader(200, {
"Content-Type": "text/html"
});
content.res.write(content.datas);
content.res.end();
} else {
this.render.call(content, "register");
}
}
module.exports = RegisterController;
答案 0 :(得分:0)
您要将Controller.prototype
分配给RegisterController.protoype
,然后修改:
RegisterController.prototype = Controller.prototype;
RegisterController.prototype.constructor = RegisterController;
这将修改程序中每个控制器的原型。
我假设所有控制器的.js
个文件正在执行此操作,并且输出的前半部分看起来正确,因为您正在记录他们一次一个。这可以解释最后的输出,因为它们共享相同的constructor
。
在修改原型之前,您需要制作原型的副本:
RegisterController.prototype = Object.create(Controller.prototype);
<小时/> 作为旁注,与您的想法相反,您向我们展示的代码中的变量并未被覆盖。如果你这样做了:
console.log(this.indexController === this.notFoundController);
你会看到:
false