将函数作为参数传递而不使用包装器不起作用,为什么?

时间:2016-11-19 13:01:28

标签: javascript ckeditor

非常奇怪的情况。我想将函数CKEDITOR.instances.Content.insertText(期望字符串作为输入)作为参数传递给我的JS函数,该函数使用自己的字符串调用它。如果我直接传递CKEDITOR.instances.Content.insertText,它不起作用并导致

未捕获的TypeError:this.fire不是函数(...)

但是当我使用包装器(在下面称为w)时它可以正常工作。传入的参数类型(insertText)报告为函数,为什么它不起作用?它必须是我不知道的某种特殊功能。有任何想法吗?由于我有一个解决方法,我感兴趣的是它为什么不起作用,而不是如何解决它。

        var f = function(func,arg)
        {
            func(arg);
        }

        var w = function (arg) // Wrapper around insertText.
        {
            CKEDITOR.instances.Content.insertText(arg);
        }

        var myFunc = function(arg) // Simulating insertText.
        {
            alert(arg);
        }

        CKEDITOR.on("instanceReady", function() {
            f(myFunc,'test'); // works, alerts correctly
            f(w, 'does work'); // works, appends text to CKEditor window
            f(CKEDITOR.instances.Content.insertText, 'does not work'); // error, while the argument is confirmed as function!
        });

0 个答案:

没有答案