0

このトピックについてこれ以上見つけることができなかったことに驚いています (私の標準以下の検索スキルかもしれません)。通常、JavaScript キーワード「this」がどのように機能するかを理解していると思うと、理解したとおりに機能しなくなります。そのような問題を 1 つ取り上げます。

私の理解:「「new」キーワードを使用して関数が呼び出されると...「this」はルート関数/「クラス」を参照します。インスタンス化された「クラス」内の関数から使用される場合、これはCALLING関数を参照します。-- これを理解することは非常に重要です。関数がページ上の別の関数から呼び出される場合、「this」キーワードは呼び出し元の関数を参照し、ターゲット関数が存在する「クラス」を参照しません。

次の例では、パブリック関数から変数を設定する 2 つの方法を試しました。どちらも失敗します。これがなぜなのか、そしてこれを機能させる方法を理解しようとしています。

var functionClass = new function(){

    var _isReady = false;

    var _getReady = function(){
        // ... do some work to get ready
        _isReady = true;
    }

    return {

        IsReady: _isReady,
        GetReady: _getReady
    }
}



var functionClass1 = new function () {

    var _isReady = false;
    var _self = this;

    var _getReady = function () {
        // ... do some work to get ready
        _self.IsReady = true;
    }

    return {

        IsReady: _isReady,
        GetReady: _getReady
    }
}


functionClass.GetReady();
functionClass1.GetReady();

console.log(functionClass.IsReady);  // Expect true ... I get false
console.log(functionClass1.IsReady); // Expect true ... I get false

更新

おそらく、Revealing Module パターンを使用していることを指摘しておく必要があります。また、そのコンテキストでの解決策を希望します。これを行うにはさまざまな方法があると確信していますが、このパターンの解決策に焦点を当てたいと思います。

4

2 に答える 2