簡體   English   中英

從外部范圍調用私有/嵌套javascript函數

[英]Calling a private/nested javascript function from an outer scope

我有這樣的JavaScript代碼。 在其中,我有一個init()函數,在該函數中,我有一個選項JSON對象,在該對象中,我有一個定義為objectselected()的函數。 我如何在按鈕單擊事件中調用該函數

我已經嘗試過像這樣的WorkFlow.init()。options.Objectselected(),但是它不起作用,

var WorkFlow = {
connectionData: [],
    selectedTouchpoints: [],
    init: function () {
        var options = {
            palleteId: "myPaletteElement",
            elementId: "playAreaContainer",
            TextStoreList: ['One', 'Two', 'Three'],
            LinkTextStoreList: $('#drpLinkType option').map(function () {
                return this.text;
            }).get(),
            shapeList: ['RoundedRectangle', 'Circle', 'Rectangle', 'Ellipse', 'Square', 'Diamond', 'Card', 'Database'],
            diagramUpdate: function (e) {

            },
            objectSelected: function (e) {
            },

            linkUpdate: function (e) {

            },
            initialize: function () {

                }



        myGraph = new Graph(options);
        options.initialize();
    },
}

如何調用該函數。

您需要返回options因為它位於init函數的作用域內

var WorkFlow = {
    connectionData: [],
        selectedTouchpoints: [],
        init: function () {
            var options = {
                palleteId: "myPaletteElement",
                elementId: "playAreaContainer",
                TextStoreList: ['One', 'Two', 'Three'],
                LinkTextStoreList: $('#drpLinkType option').map(function () {
                    return this.text;
                }).get(),
                shapeList: ['RoundedRectangle', 'Circle', 'Rectangle', 'Ellipse', 'Square', 'Diamond', 'Card', 'Database'],
                diagramUpdate: function (e) {

                },
                objectSelected: function (e) {
                },

                linkUpdate: function (e) {

                },
                initialize: function () {

                }

            myGraph = new Graph(options);
            options.initialize();
            return options;
        },
    }

並將其稱為WorkFlow.init().objectSelected();

一種解決方法是您可以返回選項,然后調用它。

init: function () {
        var options = {
            ...your code..}
        return options;
    },

並稱之為

var options = WorkFlow.init();
options.Objectselected();

基於Patrick的評論,您需要從init函數返回options

var WorkFlow = {
connectionData: [],
    selectedTouchpoints: [],
    init: function () {
        var options = {
            palleteId: "myPaletteElement",

            ...    

        options.initialize();
        return options;            
    },
}

就目前而言,您無權訪問options因為它是一個局部變量-也就是其作用域的局部變量。

要訪問其內容,您需要從init()返回它。

考慮一下:

WorkFlow.init()

當前,這返回undefined ,因為您的init()返回任何內容。 您試圖像在jQuery中那樣進行鏈接,但這依賴於API始終返回實例。 您的路徑在init()處發現了死角。

要解決此問題,請使用init()返回options -或至少要從外部訪問的部分-“導出”。

因此(基本示例)

init: function() {
    var options {
        my_func: function() { }, //<-- we want outside access to this
        private: 'blah' //<-- this can stay private - leave it out of the export
    }
    //return an export, exposing only what we need to
    return {
        my_func: options.my_func
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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