как передать переменную в метод объекта - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть объект в Javascript, который похож на ниже

var configs = {
    init: function() {
        this.var1 = 'variable 1',
        this.var2 = 'variable 2'
    },

    outer: {
        inner: {
            inner_var1: 'inner variable 1',
            inner_var2: 'inner variable 2',
            inner_var3: 'inner variable 3',
            inner_function: function(item_1, item2) {
                console.log(this.var1);
            }
        }
    }
}

var config = Object.create(configs);
config.init();
document.config = config;

Мне нужно ввести переменную, установленную в методе init, в метод external.inner.inner_function. Но предостережение в том, что я не могу передать больше переменных в список параметров метода inner_function. («Внутренний» объект - это набор опций для стороннего плагина, и функция определяется плагином и принимает только два параметра)

Как я могу ссылаться на this.var1 из внутреннего метода?

Спасибо

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Ваша проблема возникает из-за того, что у вас не вызван inner_function с правильным значением для this. Поэтому убедитесь, что this правильно привязан к нему. Например:

plugin.init(document.config.outer.inner.bind(document.config))
0 голосов
/ 17 апреля 2019

Объекты не имеют автоматической ссылки на содержащиеся в них объекты, поэтому в объекте inner нет встроенного способа добраться до outer или config.Вам нужно передать объект явно.

Таким образом, вам нужно определить его как:

inner_function: function(config, item_1, item_2) {
    console.log(config.var1);
}

и назвать его как:

document.config.outer.inner.inner_function(document.config, i1, i2);

Если вы хотите бытьЧтобы получить доступ к контейнерам без передачи их в качестве аргументов, вам необходимо явно указать их в объекте.

var configs = {
    init: function() {
        this.var1 = 'variable 1',
        this.var2 = 'variable 2'
    },

    outer: {
        inner: {
            inner_var1: 'inner variable 1',
            inner_var2: 'inner variable 2',
            inner_var3: 'inner variable 3',
            inner_function: function(item_1, item2) {
                console.log(this.parent.parent.var1);
            }
        }
    }
}
configs.outer.inner.parent = configs.outer;
configs.outer.parent = configs;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...