javascript - 在文件之间共享 'this'

标签 javascript node.js this

我正在努力创建一个将具有许多方法的对象,并试图避免我的文件非常长。问题是一些方法引用了对象中的其他信息。我希望能够做这样的事情:

索引.js

var User = function(first, last){
  this.firstname = first;
  this.lastname = last;
};

User.prototype.name = require('./methods/name.js')

方法/名称.js

module.exports = {
  full: function(){
      return this.firstname + " " + this.lastname;
  },
  formal: function(){
      return "Mr. " + this.lastname;
  }
};

为什么 this 在这种情况下不起作用是有道理的,但是是否有不同的解决方案可以引用其他文件?我唯一能想到的是使用 fs 和 eval() 而不是 require,但这对我来说似乎是一个 hack,或者显然有一个长文件。还有更好的吗?

我计划在原型(prototype)上有大约 35 个对象,每个对象平均有 4 个方法。建议?谢谢。

最佳答案

这个问题与它在单独的文件中没有任何关系。如果你这样定义用户,你会在一个文件中遇到同样的问题:

var User = function(first, last){
  this.firstname = first;
  this.lastname = last;
};

User.prototype.name = {
  full: function(){
      return this.firstname + " " + this.lastname;
  },
  formal: function(){
      return "Mr. " + this.lastname;
  }
};

因为当您调用 someuser.name.full() 时,this 将绑定(bind)到 someuser.name 而不是 someuser.

如果您不需要为这些函数命名空间并且只是因为您不确定如何从另一个文件扩展原型(prototype)而这样做,您可以使用 Object.assign :

Object.assign( User.prototype, require('./methods/name.js') );

然后你就可以调用 someuser.full()someuser.formal() 当然 this 会有正确的值。

关于javascript - 在文件之间共享 'this',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36410521/

相关文章:

node.js - "streams and pipe-capable"在 NodeJS 的 pkgcloud 中意味着什么

javascript - 我没有从 module.exports 得到答案

javascript - 如何使用数据加载器?

javascript - fs.watch 事件和 websockets,捕捉 "no-change"情况

Javascript 将 this 传递给函数

c++ - 调用基类的构造函数时隐式 'this'

javascript - 在 Javascript 中理解这个,我迷路了

javascript - 使用drawImage拉伸(stretch) Canvas

javascript - (角色扮演游戏?)HTML5 和 Javascript 中的对话系统 - 这可能吗?

node.js - 如何使用 Angular 4 设置 Nodemailer?