簡體   English   中英

從我自己的腳本中包含的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'

但這顯然有方法! 我可以在那里看到它。 我這是怎么了?

您只能從插件功能的范圍訪問該方法。 未在全局范圍內定義。

因此,您無法調用該函數。 您在代碼中所能做的就是調用函數,這些函數可通過調用函數的作用域鏈獲得。 對於您而言,這就是在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM