从外部作用域调用私有/嵌套的javascript函数

时间:2017-10-05 11:35:41

标签: javascript

我有这样的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();
    },
}

如何调用该功能。

4 个答案:

答案 0 :(得分:0)

你需要返回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();

答案 1 :(得分:0)

一种方法是你可以返回选项而不是调用它。

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

并称之为

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

答案 2 :(得分:0)

根据Patrick的评论,您需要从options函数返回init

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

            ...    

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

答案 3 :(得分:0)

就目前而言,您无法访问options,因为它是一个本地变量 - 也就是其范围的本地变量。

要访问其内容,您需要从init()返回。

想一想:

WorkFlow.init()

目前返回undefined,因为您的init()不返回任何内容。你试图在jQuery中链接,但这依赖于API总是返回实例。您的路径在init()找到了死路。

要解决此问题,请init()返回options - 或至少要从外部访问的部分内容 - " export"。

所以(基本例子)

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
    }
}