我在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中使调试控制台无法更改值
答案 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();
});
});