如何在匿名javascript中调用该函数?(TinyMce示例)

ape*_*ari 0 javascript closures tinymce this

如何在该方法中调用test()?这是可能的?

(function() {

    tinymce.create('tinymce.plugins.WrImagerPlugin', {

        init : function(editor, url) { 

            editor.addCommand('mceWrImagerLink', function() {
                //--> how can i refer to test() here?
            });
        },
        test: function () {alert('test');}
        }
    });

    tinymce.PluginManager.add('wr_imager', tinymce.plugins.WrImagerPlugin);
})();
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 5

您可以创建test常规函数并将其分配给对象,如下所示:

(function() {
    function test() { alert('test'); }

    tinymce.create('tinymce.plugins.WrImagerPlugin', {
        init : function(editor, url) { 
            editor.addCommand('mceWrImagerLink', function() {
                test();
            });
        },
        test: test
    });

    tinymce.PluginManager.add('wr_imager', tinymce.plugins.WrImagerPlugin);
})();
Run Code Online (Sandbox Code Playgroud)

或者,您可以保留对该对象的引用:

(function() {
    var wrImaergPlugin = {    
        init : function(editor, url) { 
            editor.addCommand('mceWrImagerLink', function() {
                wrImagerPlugin.test();
            });
        },
        test: function() { alert('test'); }
    }

    tinymce.create('tinymce.plugins.WrImagerPlugin', wrImagerPlugin);
    tinymce.PluginManager.add('wr_imager', tinymce.plugins.WrImagerPlugin);
})();
Run Code Online (Sandbox Code Playgroud)

最后,在这种特定情况下,您应该能够简单地打电话tinymce.plugins.WrImagerPlugin.test().