Понимание этого в функциях модуля / пространства имен и стрелок - PullRequest
2 голосов
/ 20 июня 2019

После некоторых исследований о том, как писать модульное пространство / пространство имен в javascript, я понял, что следующее может быть хорошей идеей о том, как инкапсулировать функцию / объект:

var MODULE = (function (parent) {
    var OB = parent;
    var TH = this;

    parent.num = 10;

    // method 1 - works ok, because we use normal function, "this" works as expected, returns 11
    parent.oneMore = function () { 
        return this.num + 1;
    };

    // method 2 - works ok, returns 12
    parent.twoMore = () => { return parent.num + 2;};

    // method 3 - works ok, returns 13
    parent.threeMore = () => OB.num + 3;

    // method 4 - does not work, returns NaN
    parent.fourMore = () => TH.num + 4;        

    // adding a property/method - which way would be better?
    parent.n1 = 100;        
    OB.n2     = 200;        
    this.n3   = 300; // non-sense       
    TH.n4     = 400; // also non-sense


    return parent;
}(MODULE || {}));


(function (m) {
    console.log(m.oneMore());
    console.log(m.twoMore());
    console.log(m.threeMore());
    console.log(m.fourMore());

    console.log(m.n1);
    console.log(m.n2);
    console.log(m.n3);
    console.log(m.n4);
})(MODULE);

Теперь проверьте функцию twoMore(). При использовании функций массива мы знаем, что мы не можем передать использование this напрямую.

Итак, вместо этого я решил использовать OB, где OB = parent.

Мой вопрос: есть ли разница между непосредственным использованием parent или OB? Что именно представляет parent?

Кроме того, как объявить свойства и методы? Используя parent.prop = 1;, или OB.prop = 1;, или любым другим способом?

...