nodejs / JavaScript 变量被覆盖
nodejs / javascript variable overwritten
当我的服务器收到请求时,我创建一个调度程序,该调度程序创建一个路由器,并向我的路由器请求调度程序所需的控制器,因此我向我的路由器发送一个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
为什么我的变量被覆盖?
注册.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;
您正在将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
相关文章:
- 像createComment这样的各种自定义变量名在内联javascript中被覆盖,但在外部js中没有.为什么?
- 在javascript中使用覆盖变量是不是一种糟糕的做法
- 由于异步回调,变量被覆盖
- 被覆盖的 setTimeout 变量中的函数
- 定义变量是否比在 JS 中覆盖变量使用更多的资源
- 异步Javascript变量覆盖
- 表,并选择要传递到新页面的rRow(id)(这样它就不会覆盖行选择的变量)
- 敲除js变量覆盖
- 返回语句后的函数声明全局变量不会被覆盖
- 在 forEach 循环中覆盖的变量
- 如何保护全局变量以在 Node.js 中被覆盖
- 两个函数使用相同的变量,都不会覆盖其原始变量
- 长方程与覆盖变量
- 使用相同的覆盖变量的 JavaScript 对象
- 不覆盖变量
- 每次循环覆盖变量
- 从数据库读取时覆盖变量
- JavaScript -用户的安全覆盖变量
- 覆盖变量内容javascript
- 覆盖变量或检查是否存在