我在dojo中定义了一个自定义类/小部件。如何将其某些属性/方法设为私有?
Dojo文档提倡使用_underscore将属性/方法标记为私有,但这似乎只是一个约定,并没有真正使属性/方法变为私有。
define(
["dojo/_base/declare"],
function(declare) {
declare("MyWidget", [_WidgetBase], {
publicAttr: 8,
publicMethod: function() { ... },
_privateAttr: 7,
_privateMethod: function() { ... }
});
}
);
答案 0 :(得分:2)
通常在使用JavaScript进行开发时,开发人员喜欢在私有成员前加上下划线,让其他开发人员知道不要触摸它们。这只是一个惯例,而不是真正的私人。
在JavaScript中,将变量和函数设为私有(局部变量和函数)非常容易。不幸的是,不可能将对象的属性设为私有。
如果你真的不想从Object中访问函数/变量,你可以实现类似下面的内容。
define(["dojo/_base/declare"], function(declare) {
function privateFunction(obj){
//do something private
}
declare("MyWidget", [_WidgetBase], {
publicAttr: 8,
publicMethod: function() {
privateFuntion(this);
},
});
});
此处,小部件的mehtods可以访问函数privateFunction
,其他人将无法通过小部件的实例调用该函数。
您可以将函数的上下文设置为窗口小部件,然后您将能够通过this
访问窗口小部件的所有属性,而无需将窗口小部件实例作为参数传递。有几种方法可以实现它。你可以lang.hitch
。我最喜欢的是
privateFunction.call(this, args..);
希望这有用。