我可以使用字符串中的函数名调用Require.js模块中的函数吗?
define(['jquery', function( $ ) {
var init = function() {
var elems = {};
for( var x=0; x<$('.js-elem').length; x++ ) {
elems[x] = {
dom: {
el: $('.js-elem').eq(x)
},
get animation() {
return this.dom.el.data('animation');
}
}
setEvents( elems[x] );
}
};
var setEvents = function( elem ) {
elem.dom.el.on('click', function( e ) {
console.log( elem.animation ); // = String "anim1"
this[ elem.animation ]( elem ) // = window.anim1 (Out of require.js module scope)
});
};
var anim1 = function( elem ) {
//...
};
return {
init: init
};
});
答案 0 :(得分:1)
不,您不能通过字符串引用anim1
。 “变量变量”仅适用于全局变量,但anim1
不是全局变量。
有关替代方案,请参阅"Variable" variables in Javascript?或these search results。
注意:如果是this[ elem.animation ]( elem )
,则this
不会引用window
。它引用elem.dom.el
,即处理程序绑定的元素。
但正如我所说,window[elem.animation]
也不起作用,因为anim1
不是全球性的。