2016-08-19 9 views
1

私はdojoで定義されたカスタムクラス/ウィジェットを持っています。どのように属性/メソッドを非公開にするのですか?Dojoでプライベート属性/メソッドを作成する方法は?

Dojoのドキュメントでは、属性/メソッドをプライベートとしてマークするために_underscoreを使用することが推奨されていますが、これは単なる慣例にすぎず、実際には属性/メソッドを非公開にしません。

define(
    ["dojo/_base/declare"], 
    function(declare) { 
     declare("MyWidget", [_WidgetBase], { 
      publicAttr: 8, 
      publicMethod: function() { ... }, 
      _privateAttr: 7, 
      _privateMethod: function() { ... } 
     }); 
    } 
); 

答えて

2

通常、開発者はプライベートメンバーにアンダースコアを付けると、他の開発者には触れないようにすることができます。それはただの大会で、本当に私的ではありません。

JavaScriptでは、変数と関数をプライベート(ローカル変数と関数)にするのは本当に簡単です。残念ながら、オブジェクトのプロパティを非公開にすることはできません。

実際に関数/変数にオブジェクトからアクセスできないようにしたい場合は、以下のように実装できます。

define(["dojo/_base/declare"], function(declare) { 

    function privateFunction(obj){ 
     //do something private 
    } 

    declare("MyWidget", [_WidgetBase], { 
     publicAttr: 8, 
     publicMethod: function() { 
      privateFuntion(this); 
     }, 
    }); 
}); 

ここで機能privateFunctionは、ウィジェットのインスタンスを通じて関数を呼び出すことができなくなり、ウィジェットのmehtodsと他の人にアクセス可能です。

関数のコンテキストをwidgetにすると、thisによってウィジェットのすべてのプロパティにアクセスでき、パラメータとしてウィジェットインスタンスを渡す必要はありません。あなたがそれを達成する方法のカップルがあります。あなたはlang.hitchでした。私のお気に入りは

privateFunction.call(this, args..); 

希望です。

+0

dojoはプライベート変数を指定するためにアンダースコア命名規則を使用すると思います。 – Radex

+0

はい、プライベート関数もあります。 –

関連する問題