共享'这'文件之间
Sharing 'this' between files
我正在创建一个有很多方法的对象,并试图避免我的文件太长。问题是有些方法引用了对象中的其他信息。我希望能够做这样的事情:
index.js
var User = function(first, last){
this.firstname = first;
this.lastname = last;
};
User.prototype.name = require('./methods/name.js')
methods/name.js
module.exports = {
full: function(){
return this.firstname + " " + this.lastname;
},
formal: function(){
return "Mr. " + this.lastname;
}
};
为什么this
在这种情况下不起作用是有道理的,但是否有不同的解决方案可以引用其他文件?我唯一能想到的是使用fs和eval()
而不是require,但这对我来说似乎是一个黑客攻击,或者显然是有一个长文件。有更好的吗?
我计划在原型上有大约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
将绑定到someuser.name
而不是someuser
。
如果您不需要为这些函数命名名称空间,并且这样做只是因为您不确定如何从另一个文件扩展原型,那么您可以使用Object.assign:
Object.assign( User.prototype, require('./methods/name.js') );
然后您可以调用someuser.full()
或someuser.formal()
,当然this
将具有正确的值。
您可以绑定这样的函数:
User.prototype.name = require('./methods/name').bind(this)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
bind()方法创建一个新函数,当调用该函数时该关键字设置为提供的值,具有给定的在调用新函数时提供的任何参数之前的参数。
此外—;在您的请求路径中丢失.js
。
这应该会使您的代码保持模块化
//index.js
var userMethods = require('.methods/name.js');
var User = function(first, last){
this.firstname = first;
this.lastname = last;
};
User.prototype.name = userMethods.full;
User.prototype.formalName = userMethods.formal;
var Abbey = new User('Abbey', 'Jack');
console.log(Abbey.firstname); // Abbey
console.log(Abbey.lastname); // Jack
console.log(Abbey.name()); // Abbey Jack
console.log(Abbey.formalName()); // Mr. Jack
//methods/name.js
module.exports = {
full: function(){
return this.firstname + " " + this.lastname;
},
formal: function(){
return "Mr. " + this.lastname;
}
};
相关文章:
- 如何使用Node.js在JavaScript模块文件之间使用事件处理程序
- 是否可以缓存可下载的文件,并在XHR和非XHR请求之间共享该缓存
- 我如何知道js文件之间的javascript应用程序代码流
- 为什么当我在带有锚点的页面之间移动时,Rails不重新加载我的javascript文件
- 什么's使用脚本标记调用文件和ajax之间的区别
- Chrome审核:在外部CSS文件之间的头中发现了1个内联脚本块&”;
- 如何在Famo.us中的两个视图(不同的js文件)之间进行通信
- 如何将json文件中的数据提取到对象数组中,并在两个控制器之间共享
- 关于node.js/javascript在文件之间共享变量
- 我可以在两个javascript文件之间传递一个字符串吗?
- 使用 JQuery 读取二进制文件的浏览器之间的不同行为
- 什么's是处理多个js文件之间交互的简单方法,同时避免溢出全局变量
- 如何使用WebRTC在两个浏览器之间传输文件
- 文件之间的Javascript变量
- MVC视图文件_Layout.cshtml中头部和主体的Render Bundles之间的差异
- 共享'这'文件之间
- 节点模块和常规javascript文件之间的区别是什么
- 在2js文件之间共享值
- 模块化nodejs中文件之间的函数
- 通过socket在android和nosejs之间发送文件