У меня есть метод, который устанавливает новый экземпляр массива, созданный динамически. Как я могу это сделать без использования eval()
?JavaScript - Как установить новый экземпляр как параметр, созданный динамически?
var Form = (function(){
function Form(params){
this.shapesArray = [];
this.shape;
...
}
Form.prototype.submit = function(){
... this.shape is the shape selected by the user ...
this.setShape('new Shapes.' + this.shape + '(arg1, arg2, color)');
}
Form.prototype.setShape = function(obj){
this.shapesArray.push(obj);
}
return Form;
}());
Итак, как вызвать метод setShape
, передавая new
экземпляр к нему без eval()
?
Это работает до сих пор:
Form.prototype.submit = function(){
eval('this.setShape(new Shapes.'+ this.shape.capitalize() +'('+ str_params + '))');
}
Но использование eval()
не является хорошей практикой. Как достичь такого же результата wighout eval()
?
Спасибо. Кажется, он работает. Как передать аргументы, если также аргумент Dyamically создан? Как я могу использовать 'apply'? Что-то вроде 'this.setShape (новые Shapes [this.shape] .apply (null, arr_of_args));' –
@Ezio_ См. Редактирование. Но я, очевидно, не использовал бы что-то настолько сложное, чтобы создавать экземпляры, вероятно, лучший дизайн для вашего приложения (может быть, например, карта фабрик). –
Спасибо человек. Я ценю вашу помощь. –