我想在一个函数成员内部存储一个函数对象内部的函数,但是我需要通过名称来访问它。下面的代码使您更容易理解...

// MyClassThing.js:

var MyClassThing = (function() {
    var _ref = {obj: undefined, fnc: undefined};

    function setup(domObject, refName) {
        _ref.obj = domObject;
        _ref.fnc = this['func_' + refName]; // <<-- This does not work!!
    }

    function doThing() {
        if(_ref.func)
            _ref.fnc();
    }

    function func_foo() {
        console.log('Foo!');
    }

    return {
        setup: setup,
        doThing: doThing
    };
})();

// index.html
<script>
MyClassThing.setup($('#fooObj'), 'foo');
MyClassThing.doThing();
</script>

如何使_ref.fnc = ????正常工作?

最佳答案

您将不得不使用辅助对象将方法作为其属性。然后,您将能够通过变量名称来引用它们:

var MyClassThing = (function () {

    var _ref = { obj: undefined, fnc: undefined },
        methods = {};

    function setup(domObject, refName) {
        _ref.obj = domObject;
        _ref.fnc = methods['func_' + refName];
    }

    function doThing () {
        if (_ref.fnc) _ref.fnc();
    }

    methods.func_foo = function () {
        console.log('Foo!');
    };

    return {
        setup: setup,
        doThing: doThing
    };
})();

您不能使用this,因为它指向从IIFE返回的对象,但是您感兴趣的方法不是该对象的属性。

09-25 16:50