Javascript有效的代码结构

标签 javascript oop javascript-objects

<分区>

什么是最好的(性能、内存方面)来实现创建类的干净方法或正确构建代码的某种方法,共享 2 个具有适当对象大小的变量(req、res)。

是的,对于那些使用 Node.js 的人来说,它是 req 和 res 变量,但它是无关紧要的。

这是我到目前为止尝试过的:

function Client(req, res){
  var self = this;

  self.req = req;
  self.res = res;

  route.call(self);
  handleRoute.call(self);
  handleRequestData.call(self);
}

function route(){
  var self = this;

  self.req.route = // ...
}

function handleAuth(){
  var self = this;

  self.req.auth = // ...
}

function handleRequestData(){
  var self = this;

  self.req.data = // ...
}

我想知道它是否可以改进,因为我提到 req 和 res 是具有方法和属性的相当不错的对象。由于 .call(self) 你通过实例,这是最有效的方法吗?

我也不喜欢使用“var self = this;”一直都是没用的。

顺便说一句,我不想​​使用 Coffeescript。

解决方案 1.(由于大量通过 req 和 res 而失败)

假设我们得到了文件 1。客户端.js

var Client = {
  route: function(req, res){},
  auth: function(req, res, callback){ callback(req, res); },
  getData: function(req, res, callback){ callback(req, res); } // async
}

文件2。 main.js

var client = require('./client.js');

client.route(req, res); // fine because this is syncronous.

// This is where the problem is, massive passing through req and res parameters.
client.auth(req, res, function(req, res){
  client.getData(req, res, function(req, res){
    // Do something...
  });
});

最佳答案

我不知道为什么你一直在局部变量(self)中保存上下文(this)。你不妨一路使用this,除非你需要将它带入一个不同作用域的本地对象。

此外,您可以链接原型(prototype)中的其他方法以访问它们内部的上下文:

function Client(req, res){

  this.req = req;
  this.res = res;

  this.route();
  this.handleRoute();
  this.handleRequestData();
}

Client.prototype.route = function(){
  this.req.route = // ...
}

Client.prototype.handleAuth = function(){
  this.req.auth = // ...
}

Client.prototype.handleRequestData = function(){
  this.req.data = // ...
}

如果您不想要“公共(public)”方法,只需执行以下操作:

function Client(req, res){

  this.req = req;
  this.res = res;

  route.call(this);
  handleRoute.call(this);
  handleRequestData.call(this);
}

function route(){
  this.req.route = // ...
}

function handleAuth(){
  this.req.auth = // ...
}

function handleRequestData(){
  this.req.data = // ...
}

关于Javascript有效的代码结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12062483/

相关文章:

asp.net - 如何在我的代码中使用接口(interface)使其更具可扩展性?

asp.net - 如何从 Javascript 将 TableRow/TableCell 添加到 ASP.NET 表?

c++ - 设计一个好的 C++ 包装类来包装多种功能

javascript - 检查 JavaScript 字符串是否代表日期

php - PDO 和自定义数据库包装类 : static or instance?

javascript - 在javascript中实现扩展方法

javascript - 如何从 JavaScript 数组中删除重复对象

javascript - 不使用库从 csv 文件中的文本数据创建 javascript 对象的步骤

javascript - webgl 图像 slider

javascript - 如何使用 Javascript 移除 Rails 按钮上的焦点?