2017-03-07 19 views
0

私はモジュール公開プロトタイプパターン(https://weblogs.asp.net/dwahlin/techniques-strategies-and-patterns-for-structuring-javascript-code-revealing-prototype-pattern)を使用していますが、プロトタイプ関数でこの変数にアクセスする際に問題があります。私はこのコードを持っている:モジュールはプロトタイプパターン - プライベート変数を公開します

myapp.ConfirmationWindow = function (temptype) { 
    this._type = temptype; 
}; 

myapp.ConfirmationWindow.prototype = function() { 
    this._showConfirmationWindow = function (message) { 
     var a = this._type; //valid 
     return _showWindow("hello");  
    } 

    this._showWindow = function (message) { 
     var a= this._type; //invalid 
    } 
    return { 
     showConfirmationWindow: _showConfirmationWindow 
    }; 
}(); 

は私が)_showConfirmationWindow(中this._typeにアクセスすることができるけど、_showWindowでthis._typeにアクセスすることはできませんよ。違いは、プロトタイプはpublicとして_showConfirmationWindow()を設定し、privateとして_showWindowを設定していますが、なぜ、_showWindowはthis._typeにアクセスできないのですか。なぜこれが当てはまるのですか?私が見つけた

一つの解決策は、_showWindow

に余分なパラメータとして

答えて

1

_showWindowこれを通過させることである、それはConfirmationWindow prototypeの一部ではないのでだけshowConfirmationWindowを返すことによって、それが割り当てれることは決してありませんので、あなたのインスタンスへthisの参照を持っていませんプロトタイプ。

_showWindow(message, self) 

しかし、私は最初のものを好むだろう:

_showWindow.call(this, "hello") 

など_showWindowに2つ目の引数を追加し、あなたがそれを呼び出すときthis参照を渡す:あなたは次のようにあなたのプライベート関数を呼び出すためにcallを使用することができます。

+0

または単に返す_showWindow.call(this、 "hello"); ' – jered

+0

これはもう1つのオプションです。私はちょうど 'call'を使ってスニペットを追加したかった – cyrix

+0

あなたはself = thisについて詳しく説明できますか? – user2769810

関連する問題