[英]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'
但這顯然有方法! 我可以在那里看到它。 我這是怎么了?
您只能從插件功能的范圍訪問該方法。 未在全局范圍內定義。
因此,您無法調用該函數。 您在代碼中所能做的就是調用函數,這些函數可通過調用函數的作用域鏈獲得。 對於您而言,這就是在function($){}或全局范圍中定義的所有內容。 但是插件中的功能都不是。
當調用$.fn.myExistingFunction.doMyThing
您將doMyThing myExistingFunction
對象中的字段。 但是實際上它是在函數內部定義的。 也許這段代碼更清楚了:
$.fn.myExistingFunction = function (options) {
var doMyThing = function(text) {
alert(text);
}
var hi = "hello";
}
在hi和doMyThing中,是myExistingFunction范圍內的局部變量。 如果該插件並非旨在將功能公開給外部代碼,則無法訪問變量。
旨在公開其一些內部功能的插件示例將是jQuery UI datepicker ( 文檔 )。 它在內部需要parseDate和formatDate之類的功能,但是這些實用程序功能也可能對一般開發有用,這就是為什么將它們顯式添加到datepicker對象的原因。
我認為您的代碼需要大量重寫,因為它永遠無法工作,實際上您的function doMyThing
不是 $.fn.myExistingFunction
的屬性,它只是在其中聲明,並且由於作用域如何工作在javascript中,您將永遠無法調用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.