繁体   English   中英

命名空间javascript中的私有函数

[英]Private functions in namespaced javascript

我正在尝试定义一种方法,通过该方法可以控制对我们在工作中使用的javascript方法的访问(编码标准改进驱动器的一部分)。

在我考虑使用第三方脚本方法之前,我打算使用的模式很好。

如何调整我的代码以允许从jQuery方法内部访问私有函数?

var NameSpace = new function () {

    // My private function I want to access.
    var privateFunction = function () {

    };

    this.publicFunction = function () {

        // I can access my private function here.
        privateFunction();

        jQuery(window).resize(function () {

            // But not here :(
            privateFunction();

        });
    };
};
    // I can access my private function here.
    privateFunction();
    jQuery(window).resize(function () {
        // But not here :(
        privateFunction();
    });

是的你可以。 JavaScript是静态作用域的。 您可以访问该调整大小的回调中每个封闭作用域的所有变量和函数,包括privateFunction (只要您没有通过在嵌套作用域中定义privateFunction来掩盖它)。

您不能做的是访问封闭函数之外的任何局部变量。

我正在尝试定义一种方法,通过该方法可以控制对我们在工作中使用的javascript方法的访问(编码标准改进驱动器的一部分)。

我建议这是没有意义的练习。

Namespacing可以避免不必要的名称冲突。 真正的“私有”成员的目的是严格执行严格的安全边界。 但这是JavaScript:您不会像在Java中那样在此处运行具有不同访问级别和沙箱的代码。 您不必盲目地在JavaScript中重现Java的安全模型。 谁是这里的“攻击者”? 你自己 您团队中的其他编码员?

数据隐藏和封装是一种好习惯,但是您无需严格强制私有即可实现此目的。 确实,拥有真正的私人用户可能会使调试和原型制作任务变得更加困难。 考虑一下类似Python的方法,您可以简单地标记不应从外部使用的成员,例如使用前划线。 任何使用伪私有成员的人都知道他们正在做不应做的事情,并希望有一个很好的临时理由。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM