JS: вызов функции внутри другого метода с использованием require.js - PullRequest
0 голосов
/ 11 мая 2018

Я не знаю, возможно ли это, но как я могу вызвать method_one.function_one () внутри method_Two.function_Two?

define(function (require) {

var language = require('../language.config');

return {

    method_One: function(){

        function function_One(data){

            return true;

        }

        return {
           function_One : function_One
        }
    },

    method_Two: function(){

        function function_Two(data){

            //How to call the method_One.function_One() ?
            getValueOfFunctionOne = this.method_One().function_One();

            //Do something with result
            return getValueOfFunctionOne;
        }

        return {
           function_Two : function_Two
        }
    },
};  
});

Возможно ли это сделать? Или есть другой способ сделать?

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Вы можете сделать это, используя локальную переменную в method_Two, которая будет содержать экземпляр объекта, который вы передаете как модуль в RequireJS:

 define(function (require) {

    var language = require('../language.config');

    return {

        method_One: function(){

            function function_One(data){

                return true;

            }

            return {
                function_One : function_One
            }
        },

        method_Two: function(){
            var self = this;

            function function_Two(data){

                getValueOfFunctionOne = self.method_One().function_One();

                //Do something with result
                return getValueOfFunctionOne;
            }

            return {
                function_Two : function_Two
            }
        }
    };  
});

Другой способ - использовать связывание, чтобы связать это сэкземпляр модуля:

define(function (require) {

    var language = require('../language.config');

    return {

        method_One: function(){

            function function_One(data){

                return true;

            }

            return {
                function_One : function_One
            }
        },

        method_Two: function(){
            function function_Two(data){

                getValueOfFunctionOne = this.method_One().function_One();

                //Do something with result
                return getValueOfFunctionOne;
            }.bind(this);

            return {
                function_Two : function_Two
            }
        }
    };  
});

Третий способ - присвоить возвращенный модуль переменной и использовать его в функции:

define(function (require) {

    var language = require('../language.config');

    var module = {

        method_One: function(){

            function function_One(data){

                return true;

            }

            return {
                function_One : function_One
            }
        },

        method_Two: function(){
            function function_Two(data){

                getValueOfFunctionOne = module.method_One().function_One();

                //Do something with result
                return getValueOfFunctionOne;
            };

            return {
                function_Two : function_Two
            }
        }
    };

    return module;
});

Лично я считаю, что третий вариант является лучшим, он очень читабелен, открыт для расширения.

0 голосов
/ 11 мая 2018

должно стать примерно так:

let obj = {
  meth1: () => {
    function func1() {
       return true;
    }

    return {
       func1: func1
    }
  },

  meth2: () => {
    // notice the use of "obj"
    obj.meth2().func1()
  }
}

// test it
obj.meth2(); // returns true
...