Как правильно обращаться к атрибутам и функциям класса внутри модулей - PullRequest
0 голосов
/ 15 февраля 2020

Я пишу классы в модулях ES6, используя объектные литералы, и я хочу установить атрибуты объекта внутри функции. Теперь я знаю, что модули по умолчанию выполняются в строгом режиме, что делает использование this безопасным или, по крайней мере, безопасным, но я не уверен, что foo() изменяет объект, к которому я обращаюсь, в файле сценария 'parent' или просто локальный объект, существующий только в Controller.mjs. Оба вызова функций имеют одинаковый эффект?

//Controller.mjs
const Controller = {
    someAttr1: [],
    someAttr2: true,

    foo: function () {
        this.someAttr1.push("some value");
        Controller.someAttr1.push("some value");
    }
};

//export Controller's interface...

//SomeOtherFile.mjs
import { Controller } from 'Controller.mjs'

Controller.foo();

1 Ответ

1 голос
/ 16 февраля 2020

объект, к которому я обращаюсь в «родительском» файле сценария, или только локальный объект, существующий только в Controller.m js

Существует только один объект в вашем коде. Объявление import действительно ничего не делает, кроме создания псевдонима для переменной const Controller в импортированном модуле. Второй экземпляр объекта не создается.

В общем, для использования this против Controller для ссылки на объект см. Javascript: ссылка на литерал объекта в функции собственного ключа вместо ' это . Не имеет значения, распространяется ли код по модулям или нет.

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