我使用jquery .data()
获取html数据并将其拆分为函数名,但名称是字符串,而不是函数,我想使用字符串名称执行匹配函数。
在这个演示中,我得到的字符串名称是 scale和scaleY ,如何使用名称执行scale和scaleY函数? 非常感谢!
这样的错误:
for (var i = 0; i < useData.length; i++) {
var funName = useData[i],
var excFun = new Function(funName);
excFun();
console.log(useData[i]);
}
/////////////////////////////////////////////// ///////////
<section class="boxed">
<div class="tweenItems">
<h3 data-tween="scale scaleY"> test scale</h3>
<h3 data-tween="scale scaleY"> test scale</h3>
<h3 data-tween="scale scaleY"> test scale</h3>
<h3 data-tween="scale scaleY"> test scale</h3>
<h3 data-tween="scale scaleY"> test scale</h3>
</div>
</section>
var scale = function(dir) {
TweenMax.set(tweenItem, {opacity:1});
TweenMax.staggerFrom(tweenItem, 0.8, {
"opacity":1,
scale:0 * dir,
delay:0.8
}, 0.1);
}
var scaleY = function(dir) {
TweenMax.set(tweenItem, {opacity:1});
TweenMax.staggerFrom(tweenItem, 0.8, {
"opacity":1,
scaleY:0 * dir,
delay:0.8
}, 0.1);
}
var tweenData = tweenItem.data("tween");
var useData = tweenData.split(" ");
console.log(useData.length);
for (var i = 0; i < useData.length; i++) {
var funName = useData[i],
var excFun = new Function(funName);
excFun();
console.log(useData[i]);
}
&#13;
答案 0 :(得分:0)
是的我修复了一个错误
for (var i = 0; i < useData.length; i++) {
var funName = useData[i];
var excFun = new Function(funName);
excFun();
}
但是控制台给我这个:
未捕获的ReferenceError:未定义比例 为什么未定义比例以及如何修复我的代码 谢谢++
答案 1 :(得分:0)
我想到两件事:功能提升和eval()。
由于函数提升,比例可能未定义(比例在运行时定义为变量,而不是在运行时之前的分析时执行的函数)。如果这是问题,您可以通过重新定义功能来解决此问题。
示例:
var scale = function(dir) { ... }
成为
function scale(dir) { ... }
我发现奇怪的另一件事是你正在使用Function构造函数通过string(函数名称)创建对函数的引用。我建议尝试使用eval,也许包装在一个试图捕获以确保安全。
示例:
而不是
var excFun = new Function(funName);
试
eval(funName + '()');
你可以摆脱整个for循环:
useData.forEach(function(fnName) { eval(fnName + '()'); });