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

时间:2016-08-19 11:26:04

标签: javascript scope dojo private access

我在dojo中定义了一个自定义类/小部件。如何将其某些属性/方法设为私有?

Dojo文档提倡使用_underscore将属性/方法标记为私有,但这似乎只是一个约定,并没有真正使属性/方法变为私有。

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

1 个答案:

答案 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..);

希望这有用。