2009-06-18 2 views
3

シンプルなので、Javascriptで「保護された」可視性をどうにかエミュレートできますか?私たちはJavaScriptでプライベートIDを持つことができますが、保護されたIDはどうですか?

+0

私は主なポイントは、JavaScriptのような言語であなたがそこに障壁を置くことができると思う...しかし、それは土嚢のようなものです...それは水浸漬を停止しない可能性がありますあなたのカーペット:P –

+0

私は被災者が非難されていると信じており、それは人々がこれを行うために頼りにしているようだ。 – Nosredna

答えて

4

はこれを行います。

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

やGoogleのビットは、最初のページにこれを見つけた:

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

+0

この男がやっていることは、彼が「これ」に電話機能と同じ方法を持っているかどうかを知るためにちょっとしたタイピングをしているだけです。 –

+0

私が言っていることは、あなたが本当にあなたの保護されたものを保護することができるとは思わないということです:P –

+0

@Pablo、私は全く同意します...しかし、その動作を具体的なセマンティクスとして望むなら、JSあなたが望む言語ではありません:P –

1

それはおそらく何を意味するのだろうか? クラスがありません。

callerを分析して、メソッドの呼び出しが許可されているかどうかを判断することができます。これは隠されて非効率的であり、あなたの基準は常にスプーフィング可能です。

+0

真実ではありません。 Javascriptでは_everything_はオブジェクトです。受動的な構文ではなく、アクティブな構文を使用してクラスを定義します。構成と宣言。 – Christopher

+1

@Christopher ...プロトタイプがクラスではないということは間違っています。それらもインターフェイスですか? –

+2

さて、大丈夫です。しかし、私が意味するのは、オブジェクトが属しているかどうかを知ることができるエンティティ分類の名前空間を持たないことです。継承者のように見せたいものから継承者に伝えることはできません。 – chaos

2

Sureすることができます。別のexampleがあります。

+0

スナップ! :) ...... –

+1

うわー。それはサイコです。 – chaos

+0

実際、それはCHAOSです;) –

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/

関連する問題