首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node.js -使用变量作为对象名来调用方法

Node.js -使用变量作为对象名来调用方法
EN

Stack Overflow用户
提问于 2016-02-25 09:35:03
回答 3查看 2.4K关注 0票数 1

我刚接触node,只是尝试使用process.argv在正确的对象上调用一个方法,但我一直收到一个错误,它无法读取未定义的属性。

代码语言:javascript
复制
// returns with undefined error
var stops_input = process.argv[3];
this[process.argv[3]].displayStops();

// hard-coding object name works with the method:
N.displayStops();

// displayStops method
this.displayStops = function(){
  string = "";

  stops.forEach(function(i){
    if (i === stops[stops.length -1]) {
      string += i;
    } else {
      string += i + ", ";
    }
  });

  console.log(this.name + " train stops: " + string);
}

谢谢你看一看。关于如何从节点终端控制台使用变量调用对象,您有什么想法吗?

EN

回答 3

Stack Overflow用户

发布于 2016-02-25 09:43:06

尝试使用global而不是this...

代码语言:javascript
复制
global[process.argv[3]].displayStops();

这里假设N是传递给节点脚本的第二个参数,它存在于全局作用域中,并且附加了一个displayStops方法。

票数 0
EN

Stack Overflow用户

发布于 2016-02-25 09:55:01

我会做以下事情。

代码语言:javascript
复制
// Your argument from the commandline (faked for your pleasure)
var method = 'xxx'

// 1. Create a function as normal
function xxx() {
    return 'xxx'
}

// 1. Create a reference to it
var callable = {xxx: xxx}

// 1. Call it
callable[method]()

要查看上下文中的内容:

代码语言:javascript
复制
console.log(this); // {}
console.log(global.xxx); // undefined
console.log(Object.keys(global)); // Run to see the list

如果您想继续使用this,请更改以下内容:

代码语言:javascript
复制
this[process.argv[3]]().displayStops()

要这样做:

代码语言:javascript
复制
this[process.argv[3]]()

前者等同于:

代码语言:javascript
复制
this['displayStops']().displayStops()

但是你想要后者,这等同于:

代码语言:javascript
复制
this['displayStops']() // The same as calling this.displayStops()
票数 0
EN

Stack Overflow用户

发布于 2016-02-25 10:56:45

我刚接触node,只是尝试使用process.argv在正确的对象上调用一个方法,但我一直收到一个错误,它无法读取未定义的属性。

process.argv将返回一个参数数组

所以你打电话给我

代码语言:javascript
复制
node program.js 1 2 3

在终端中

代码语言:javascript
复制
var params = process.argv;
console.log(params);

你会得到

代码语言:javascript
复制
[node, path/to/program.js, someMethod, 2, 3]

假设您传递的第一个参数是一个对象

代码语言:javascript
复制
var firstParam = process.argv[2];

现在,如果你有一个用方法定义的对象...

代码语言:javascript
复制
var obj = {
    someMethod : function() {
        console.log("Hello");             
    }
}

您可以像这样调用此方法

代码语言:javascript
复制
obj["someMethod"]();
obj[firstParam]();
obj.someMethod();

他们都应该说出"hello“

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35616648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档