Is there a better way of executing the string "getData" without eval or eval a good option in this case since what is being evaluated is not user generated?
object.myMainObject(Marcus)
object = {
Data = {
Marcus : function(){
alert('marcus function')
},
James : function(){
alert('james function')
}
}
myMainObject : function(string){
getData = "object.Data." + string + "()"
eval(getData)
}
}
eval
is completely unnecessary for this case, just use the bracket notation to access the dynamically named property:
var object = {
Data : {
Marcus : function(){
alert('marcus function');
},
James : function(){
alert('james function');
}
}
myMainObject : function(string){
var getData = object.Data[string]();
}
};
object.myMainObject("Marcus"); // 'marcus function'
Notes:
object
(you were using =
, instead of :
).var
statement to declare object
nor getData
, please, when declaring variables, use the var
statement, otherwise, they will end up as properties of the global object.As a safety measure, you could check if the member that's being accessed is actually a function before calling it, e.g.:
//...
var getData;
if (typeof object.Data[string] == 'function') {
getData = object.Data[string]();
}
//...