使用字符串var在Require.js模块内调用函数

时间:2015-05-12 15:28:44

标签: javascript requirejs

我可以使用字符串中的函数名调用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
    };

});

1 个答案:

答案 0 :(得分:1)

不,您不能通过字符串引用anim1。 “变量变量”仅适用于全局变量,但anim1不是全局变量。

有关替代方案,请参阅"Variable" variables in Javascript?these search results

注意:如果是this[ elem.animation ]( elem ),则this不会引用window。它引用elem.dom.el,即处理程序绑定的元素。

但正如我所说,window[elem.animation]也不起作用,因为anim1不是全球性的。