如何在Dojo中创建私有属性/方法?

ih99xse1  于 2022-12-08  发布在  Dojo
关注(0)|答案(1)|浏览(156)

我在Dojo中定义了一个自定义的类/小部件。我如何使它的一些属性/方法私有化?
Dojo文档提倡使用_underline将属性/方法标记为私有,但这似乎只是一种约定,并没有真正使属性/方法成为私有的。

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

dly7yett1#

通常在用JavaScript开发的时候,开发者喜欢在他们的private成员前面加上一个下划线,让其他开发者知道不要碰它们。这只是一个约定,并不是真正的private。
在JavaScript中,使变量和函数私有化(局部变量和函数)非常容易,但不幸的是,不可能使对象的属性私有化。
如果你真的不想让函数/变量不能从对象中访问,你可以实现如下所示的东西。

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

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

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

在这里,函数privateFunction可由小部件的方法访问,其他人将无法通过小部件的示例调用该函数。
你可以把函数的上下文放到widget中,然后你就可以通过this访问widget的所有属性,而不需要把widget示例作为参数传递。有几种方法可以实现它。你可以lang.hitch。我最喜欢的是

privateFunction.call(this, args..);

希望这对你有帮助。

相关问题