从我自己的脚本中包含的Javascript文件中调用一个函数
Call an function from an included Javascript file in my own script
我有一个没有写的脚本已经在页面上运行了。我希望,在我编写的脚本中,能够执行原始脚本中的函数。以下是我尝试做的事情的一个简化示例:
(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中的工作方式,您永远无法调用它。
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 我可以在json对象中添加一个函数吗
- Javascript使函数一个接一个地执行
- 是JavaScript中的函数一个对象
- 两个几乎相等的jQuery函数;一个适用于IE,一个不适用于IE
- 两个Javascript函数一个window.onload=Custom.init;和一个window.onload=f
- 使javascript加载函数一个接一个地执行
- 如何通过两个嵌套的匿名函数(一个带有超时的事件处理程序)传递变量
- 为什么我不能让两个jQuery函数一个在另一个里面呢?
- 给函数一个变量名,而不是它的值
- 如何使用嵌入函数(一个滚动页由Pete - peachananr)
- 是否有可能给JavaScript函数一个类型/类?
- 确保两个函数一个接一个地执行,其中第一个函数内部有一个异步调用
- 两个不同的ajax函数一个接一个调用返回相同的值
- jQuery第一次更改函数一个工作
- 给这个函数一个id
- 如何给回调函数一个值一个变量在特定时刻
- 使用回调使两个函数一个接一个地运行
- 两个函数(一个用php)是否可以用“;onclick”;
- 两个几乎相同的函数.一个函数用Queue进行排队.Jquery效果在queued函数上不起作用.为什么