3

そのように簡単ですが、Javascript で「保護された」可視性をエミュレートできますか?

4

4 に答える 4

4

これを行う:

/* Note: Do not break/touch this object */
...code...

または、少しのグーグルが最初のページでこれを見つけました:

http://blog.blanquera.com/2009/03/javascript-protected-methods-and.html

于 2009-06-18T20:28:57.093 に答える
2

確かにできます。別のを次に示します。

于 2009-06-18T20:30:07.870 に答える
1

それはどういう意味ですか?クラスがありません。

callerメソッドの呼び出しを許可するための一連の基準を満たしているかどうかを分析して判断できると思います。これは非常に非効率的であり、基準は常になりすまし可能です。

于 2009-06-18T20:29:29.073 に答える
1

ここで言及する価値のある興味深いパターンがあります: JavaScript コンストラクター関数は任意のオブジェクトを返す可能性があります (必ずしもthisではありません)。「実際の」インスタンス オブジェクトの「実際の」メソッドへのプロキシ メソッドを含む、プロキシ オブジェクトを返すコンストラクタ関数を作成することができます。これは複雑に聞こえるかもしれませんが、そうではありません。コードスニペットは次のとおりです。

var MyClass = function() {
    var instanceObj = this;
    var proxyObj = {
        myPublicMethod: function() {
            return instanceObj.myPublicMethod.apply(instanceObj, arguments);
        }
    }
    return proxyObj;
};
MyClass.prototype = {
    _myPrivateMethod: function() {
        ...
    },
    myPublicMethod: function() {
        ...
    }
};

良いことは、保護されたメソッドの命名規則を定義すると、プロキシの作成を自動化できることです。まさにこれを行う小さなライブラリを作成しました: http://idya.github.com/oolib/

于 2012-11-26T03:06:22.150 に答える