Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
命名空间javascript中的私有函数_Javascript - Fatal编程技术网

命名空间javascript中的私有函数

命名空间javascript中的私有函数,javascript,Javascript,我正试图定义一种方法,以控制对我们在工作中使用的javascript方法的访问(编码标准改进活动的一部分) 在我考虑如何使用第三方脚本方法之前,我计划使用的模式很好 如何调整代码以允许从jQuery方法内部访问私有函数 var NameSpace = new function () { // My private function I want to access. var privateFunction = function () { }; this.pu

我正试图定义一种方法,以控制对我们在工作中使用的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();

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

您不能访问封闭函数之外的任何这些局部变量

我正试图定义一种方法,以控制对我们在工作中使用的javascript方法的访问(编码标准改进活动的一部分)

我认为这是一个毫无意义的练习

名称空间有助于避免不必要的名称冲突。真正“私人”成员的目的是严格执行严格的安全界限。但这是JavaScript:您不会像在Java中那样运行具有不同访问级别和沙箱的代码。您不必盲目地在JavaScript中复制Java的安全模型。谁是这里的“攻击者”?你自己你团队中的其他程序员


数据隐藏和封装是一种很好的做法,但您不需要严格执行私有性来实现这一点。事实上,拥有真正的私人空间可能会使调试和原型制作任务更加困难。考虑Python的方法,您只需标记不应该从外部使用的成员,例如使用一个领先的下划线。任何使用伪私有成员的人都知道他们正在做不应该做的事情,并且希望有一个好的临时理由这样做。

在什么意义上?这真的是实验。如果能够更严格地控制我们生成的javscript,那就太好了。我不知道,对我来说,在一种通常没有访问修饰符的语言中添加访问修饰符听起来会适得其反。人们指望JavaScript库没有它们。你真的试过上面的代码吗?在我看来,由于关闭,私用功能应该是可用的。我现在觉得自己很愚蠢。我信任Visual Studio中的javascript intellisense。感谢您的支持。非常感谢。
    // I can access my private function here.
    privateFunction();
    jQuery(window).resize(function () {
        // But not here :(
        privateFunction();
    });