【问题标题】:How to make a private attribute/method in Dojo?如何在 Dojo 中创建私有属性/方法?
【发布时间】:2016-12-26 13:07:06
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript scope dojo private


    【解决方案1】:

    通常在使用 JavaScript 进行开发时,开发人员喜欢在他们的私有成员前加上下划线,让其他开发人员知道不要碰它们。这只是一个约定,并不是真正的私密。

    在 JavaScript 中,将变量和函数设为私有(局部变量和函数)非常容易。不幸的是,无法将对象的属性设为私有。

    如果您真的不希望从 Object 无法访问函数/变量,您可以实现如下所示。

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

    希望这对您有所帮助。

    【讨论】:

    • 我认为dojo使用下划线命名约定来指定私有变量。
    • 是的,还有私有函数。
    猜你喜欢
    • 2011-10-01
    • 2016-02-13
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 2012-03-20
    • 2014-10-06
    • 1970-01-01
    相关资源
    最近更新 更多