从我自己的脚本中包含的Javascript文件中调用一个函数

Call an function from an included Javascript file in my own script

本文关键字:函数 一个 调用 Javascript 自己的 我自己 脚本 包含 文件      更新时间:2023-09-26

我有一个没有写的脚本已经在页面上运行了。我希望,在我编写的脚本中,能够执行原始脚本中的函数。以下是我尝试做的事情的一个简化示例:

(function ($) {
$.fn.myExistingFunction = function (options) {
    function doMyThing(text) {
        alert(text);
    }
}
}(jQuery));
jQuery(document).ready(function($) {
    $.fn.myExistingFunction.doMyThing("alert text");
});

然而,当我运行这个时,我得到控制台输出:

Uncaught TypeError: Object function (options) {
    function doMyThing(text) {
       alert(text);
    }
} has no method 'doMyThing'

但它显然有方法!我可以在那里看到它。我做错了什么?

您只能从插件函数的作用域访问该方法。它没有在全局范围中定义。

所以你不能调用那个函数。在代码中所能做的就是调用函数,这些函数可以通过调用函数的作用域链来使用。在您的情况下,这是在函数($){}或全局范围中定义的所有内容。但插件中的函数两者都不是。

当您调用$.fn.myExistingFunction.doMyThing时,您将doMyThing视为myExistingFunction对象中的字段。但实际上它是在函数内部定义的。也许这个代码让它更清晰:

$.fn.myExistingFunction = function (options) {
    var doMyThing = function(text) {
        alert(text);
    }
    var hi = "hello";
}

In hi和doMyThing是myExistingFunction范围内的局部变量。如果插件不是为了向外部代码公开功能而设计的,那么您就无法访问变量。

jQueryUI日期选择器(文档)就是一个插件的例子,它被设计为公开它的一些内部函数。它需要像parseDate和formatDate这样的函数,但这些实用程序函数可能对一般开发也很有用,这就是为什么它们被显式添加到日期选择器对象中的原因。

我认为您的代码需要进行重大重写,因为它永远不会工作,事实上,您的function doMyThing而不是$.fn.myExistingFunction的属性,它只是在其中声明的,由于作用域在javascript中的工作方式,您永远无法调用它。