如何执行存储在变量 / var x= "function(){alert('a')}" 中的函数



我该怎么做是javascipt

var x = 'function(){ ... }'
x = x.toFunction();
x();

例如,我一直在使用var x = '...'; eval(x)但我读到这很糟糕而且很慢。

如果它有帮助,我试图完成的是运行一个作为属性传递给<loaded>的函数 例如:

.HTML

<p loaded="test, function(){alert('it worked!')}">

AngularJS

.directive('loaded', function() {
return {
restrict: 'A',
link: function(scope, elem, attr) {
var paramOne = attr.loaded.substr(0, attr.loaded.indexOf(',')) //paramOne = test
var paramTwo = attr.loaded.substr(paramOne.length+1).trim() //paramTwo = "function(){alert('it worked!')"
if (paramOne==='test') paramTwo() //This is where I use to use eval(paramTwo)
}
}
}) 

这是一个jsfiddle。

*编辑:*我不将此作为答案发布,因为我还不确定。我可能做错了一切。

var x = "function(){alert('it worked!')";
x = new Function('(' + x + ')()');
x(); //alerts 'it worked!'

请让我知道我的编辑是否是一个可行的答案,或者我是否应该遵循全新的方法

我没有测试这段代码,但我认为这就是这个想法:

.directive('loaded', function() {
return {
restrict: 'A',
scope: {
fn: '&'
}
link: function(scope, elem, attr) {
var paramOne = attr.param1;
if (paramOne === 'test'){
scope.fn();
}
}
}
});

fn是要在链接函数中执行的函数。您可以在控制器中定义此函数。param1是您应该在另一个属性中传递的参数(在这种情况下,此属性的值将为"test")。

<p loaded param1='test' fn='fn()'>

最新更新