2016-02-25 1 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: этот [process.argv [3]] не является функцией –

+2

Трудно сказать, что здесь происходит.Является ли 'N' объектом с помощью метода displayStops()'? И является ли 'N' свойством любого объекта, на который это ссылается, в этом контексте? И «N» - второй аргумент, который вы передаете, когда вы запускаете свою программу из командной строки ('process.argv [3]' должен быть вторым аргументом)? Или является '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(); 

Все они должны производить "привет"