如何在dojo中使用get(getter)关键字

时间:2017-02-10 08:56:15

标签: dojo

我在dojo类(AMD)中寻找类似下面的功能。

function () {
            var _foo = 123; // private variable
            return {
               get foo () { return _foo; }
           };
       }());

优点是一旦初始化值_foo,用户就无法从控制台修改值_foo或foo。我们如何在dojo类中实现这一点,如

 define["dojo/_base/declare", "dojo/request", "dojo/_base/lang"],
           function(declare, request, lang) {
           var _foo = 123; 
           return declare("fooClass", null, {
              get foo () { return _foo; }
       });
       });

当我尝试使用dojo build.sh构建类时,如上所述,它给出了解析错误。如何在dojo中使调试控制台无法更改值

1 个答案:

答案 0 :(得分:0)

您的解决方案没有什么优势,就像用户打开调试器控制台一样,开发人员可以在var _foo =123;设置断点并随时在运行时更改其值。

在你的代码中,你实际上是在展示一个闭包的例子。 封闭允许您的var _foo隐藏在function()内,因此开发人员无法在其js代码中获取该值。

尽管如此,你仍然可以使用调试器控制台添加一个简单的断点来访问它。

如果您对dojo使用getter和setter感兴趣,请继续阅读。

指定自定义getter或setter的dojo命名约定(在此示例中为名为foo的属性):

_setFooAttr()_getFooAttr()

示例:

require([
     "dojo/_base/declare", "dojo/dom-style", "dojo/parser", "dojo/ready",
     "dijit/_WidgetBase", "dijit/_TemplatedMixin"
 ], function(declare, domStyle, parser, ready, _WidgetBase, _TemplatedMixin){

     declare("HidePane", [_WidgetBase], {
         // parameters
         open: true,
         // custom setter
         _setOpenAttr: function(/*Boolean*/ open){
             this._set("open", open);
             domStyle.set(this.domNode, "display", open ? "block" : "none");
         }
     });

     ready(function(){
         parser.parse();
     });
 });