2016-02-25 182 views
0

我是新來的節點,只是試圖使用process.argv調用正確的對象上的方法,但我不斷收到一個錯誤,它不能讀取undefined屬性。Node.js - 使用變量作爲對象名稱來調用方法

// 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); 
} 

感謝您的關注。有關如何使用節點終端控制檯中的變量調用對象的任何想法?

+0

你嘗試'這個[process.argv [3]()' – adeneo

+0

這個[process.argv [3]()displayStops()。拋出我這個錯誤: TypeError:this [process.argv [3]]不是函數 –

+2

很難說出這裏發生了什麼。'N'是一個帶有displayStops()方法的對象嗎?在這種情況下,「N」是否是「this」引用的任何對象的屬性?當你從命令行運行你的程序('process.argv [3]'應該是第二個參數)時,你傳遞的第二個參數是'N'?或者'N'是一個自由浮動的變量(在這種情況下,你不能做你正在做的事情,但有解決方法)? – McMath

回答

0

嘗試使用global代替this ...

global[process.argv[3]].displayStops(); 

這假定N是傳遞給該節點腳本的第二個參數,而且它在全球範圍中,並且具有displayStops附着的方法它。

0

我會做以下事情。

// 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]() 

,看看有什麼在你的背景:

console.log(this); // {} 
console.log(global.xxx); // undefined 
console.log(Object.keys(global)); // Run to see the list 

如果你想堅持this,改變這種:

this[process.argv[3]]().displayStops() 

要這樣:

this[process.argv[3]]() 

的前者相當於:

this['displayStops']().displayStops() 

但你想要的以後,這相當於:

this['displayStops']() // The same as calling this.displayStops() 
+2

'callable [method]()' –

+0

已更新。謝謝! –

0

I am new to node and just trying to use the process.argv to call a method on the correct object, but I keep getting an error it cant read property of undefined.

process.argv將返回的參數

所以你調用數組

node program.js 1 2 3 

在終端

var params = process.argv; 
console.log(params); 

你會得到

[node, path/to/program.js, someMethod, 2, 3] 

假設你傳遞的第一個參數是一個對象

var firstParam = process.argv[2]; 

現在,如果你有一個方法定義的對象...

var obj = { 
    someMethod : function() { 
     console.log("Hello");    
    } 
} 

你可以這樣調用這個方法

obj["someMethod"](); 
obj[firstParam](); 
obj.someMethod(); 

他們都應該產生 「你好」

相關問題