5

Single Page Apps in Depthからのこの抜粋が何を意味するのか、誰か説明できますか?

クラス (たとえば、プロトタイプからインスタンス化されたオブジェクト) の一般的なパターンは、クラス メソッドをアンダースコアで開始することによって単純にプライベートとしてマークすることです。.call/.apply を使用して "this" を設定することにより、クラス メソッドを適切に非表示にすることができますが、ここでは示しません。それは些細なことです。

アンダースコアでマークするだけの慣習ではなく、実際に「プライベート」JavaScriptメソッドに実際にアクセスできないようにする方法があることを示唆していると思いますが、実装がどのようになるか、どのように使用されるかは想像できません.

4

2 に答える 2

3
var Treasure = function(){  
  function locate(){
    return this.x * this.y + 31337;
  }

  function Treasure(x, y){
    this.x = x;
    this.y = y;
  }

  Treasure.prototype.find = function find(){
    return locate.call(this);
  };

  return Treasure;
}();

locateコンストラクターとプロトタイプ メソッドの共有プライベート関数です。それを使用callすると、メソッドのように機能し、 を利用できthisます。

この概念のより完全な実装は、インターフェイス オブジェクトと実装オブジェクトの実装です。メソッドとしてのいくつかのランダムな関数 (上記の場所と同様) を用意する代わりに、実際にはプライベートなクラス全体を作成します。インターフェイスを外部で作成するたびに、パブリック シェル インターフェイスとプライベート実装オブジェクトの 2 つのオブジェクトが作成されます。これにより、別の、おそらく使いやすい API を提供するインターフェイスをパブリックに公開できます。または、インターフェイス オブジェクトのグループ全体に対して単一のプライベート実装オブジェクトを再利用できるようにすることもできます。

これは実際にDOMが機能するように指定されている方法です(ただし、通常はjsでは実装されていません)。インターフェース オブジェクト (要素やノード オブジェクトなど) は、実際に単語を実行する基礎となる実装をラップするために特に必要です。公開されたオブジェクトは、プロパティ アクセスとメソッド呼び出しを転送するシェルにすぎません。

Dom.js は、js で作成された本格的な DOM 実装です。作業中に私が知った興味深い手法は、パブリック インターフェイスの完全に自動化された生成です。これが IDL の目的です。パブリック API は文字どおり自動的に生成され、プライベートな実装だけが実際に作成されます。これが実際に意味することは、人間に相談せずにこのようなものを作成できることです: https://github.com/Benvie/svgstuff/blob/master/lib/defs.js

于 2012-07-04T08:10:23.303 に答える
1

この例では、2 種類の変数を確認できます。最初のものは非公開で、2 つ目はパブリックにアクセスできることに注意してください。

function x() {
    var _var1 = "hello";
    this.var2 = "world";
    x.prototype.innerTest = function() {
        console.log("inner var1: " + _var1);
        console.log("inner var2: " + this.var2);
    }
}

var y = new x;
console.log("var1: " + y._var1);
console.log("var2: " + y.var2);

// var1: undefined
// var2: world

内部テストを実行すると、クラス内からvar1にアクセスできることが示されます。

y.innerTest();
// var1: hello
// var2: world
于 2012-07-04T04:59:02.073 に答える