在我的上下文中添加对象的动态方法
Add dynamically methods of an object in my context
In node.js,而不是:
dummy = require('dummy')
dummy.aMethod()
dummy.anotherMethod()
我想在我的上下文中直接使用这些方法:
dummy = require('dummy')
loadMethods(dummy)
aMethod()
anotherMethod()
如何实现函数加载方法?
你可以
做的一件事是使用 with
,像这样:
with (dummy) {
aMethod();
anotherMethod();
}
但是不建议这样做,因为它会使很多事情模棱两可,并且不会像您期望的那样行事。
若要完全执行所请求的操作,可以将这些方法添加到global
对象。你可以使用这样的东西:
for (var prop in dummy) {
if (dummy.hasOwnProperty(prop)) {
global[prop] = dummy[prop];
}
}
不过,这种方法也有其局限性 - 例如,您不能在函数体中使用 aMethod(),this
对象将是错误的(当然,您可以使用bind
来保持其正确)。此外,global
不是真正的全局,而是模块范围的 - 因此每个模块都有自己的global
对象。
因此,权衡选项,您可能应该坚持使用这些方法 通过 dummy
.这样,您将始终获得预期的行为(this
将被dummy
),并且您将清楚地指示您正在使用的方法实际上是在dummy
模块中实现并使用其状态的。找到一个好的IDE和键入应该不是问题。
利用this
的延展性。当调用函数而不绑定到this
的特定作用域(可以通过 .call、.apply 或在方法上下文中完成)时,this
引用全局对象。此代码将在浏览器和 Node.js 中工作,但当然会覆盖任何其他具有相同名称的全局范围的函数。谨慎使用...一般来说,我建议不要使用它。
function loadMethods(obj) {
for (var prop in obj) {
if (obj.hasOwnProperty(prop) && typeof(obj[prop]) === 'function') {
this[prop] = obj[prop]
}
}
}
您可以在此处了解有关this
上下文的更多信息
相关文章:
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- 你能把一个匿名方法(函数)动态地变成一个命名方法吗
- 当用户点击动态创建的链接时,如何调用JS方法.JQuery,ASP.NET MVC
- 有没有一种方法可以用YepNope.js为脚本提供动态名称
- 在extJS 4.2中,有没有一种方法可以将模型值动态绑定到表单
- 当从Chrome扩展动态注入JS时,从onload()内部调用方法
- 有没有一种方法可以基于Angular 2中注册的路线构建动态导航/菜单
- 离子滑块 - 有一种方法可以动态更改间隔
- 如何在jQuery的.on()方法中动态更新按钮的ID选择器
- AngularJS中的动态表单验证 - 是否有更好的解决方案/方法
- jQuery .change() 方法不适用于动态创建的复选框
- 在我的上下文中添加对象的动态方法
- Javascript:添加动态方法
- 使用 javascript/nodejs 创建动态方法
- 从带有参数的字符串进行动态方法调用 - node.js
- Python动态方法
- JavaScript对象上的动态方法
- 如何在data-ng-click中传递调用动态方法而不是静态方法(即想要传递要调用的方法而不是固定的delete()方法
- JS: json,动态方法的创建和闭包
- 来自ES6中的类的动态方法调用