【问题标题】:Class variable in javascript classjavascript类中的类变量
【发布时间】:2009-04-20 10:36:19
【问题描述】:

question 的解决方案建议使用 John Resig 的类实现。该解决方案涵盖了我的所有需求,除了:

如何在这个类内部声明一个可以从外部访问的公共全局变量?

我想建立类似以下的东西:

    var MyClass = Class.extend({

        EVENT_NAME : 'event-name',

        init : function() {
            // ...
        }

    });

// Now another file can directly read this value without creating the class object
console.log( MyClass.EVENT_NAME );

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    做你想做的事情的“唯一”方法是将函数用作“类”。这样,您就可以声明一个可以访问其公共“静态”成员的“类”。像这样的:

    function MyObject() {
      // constructor stuff here
    }
    MyObject.EVENT_NAME = "event_name";
    
    console.log(MyObject.EVENT_NAME); // No need to instantiate MyObject
    

    但是,在我看来,您将静态类型语言的概念与 Javascript 更动态的东西混合在一起。为什么要访问尚未创建的对象的成员?

    【讨论】:

    • 有很多原因,并且已经在 J​​avascript 中嵌入了示例:查看 Math 类中的所有静态成员和方法:Math.PI、Math.round() 等。这只是基本的命名空间和如果您想避免冲突,这是一个非常好的主意。
    • 我理解,但你基本上说的是你想在定义/创建之前访问“类”的成员。
    • 我需要在我的类中声明静态字段变量。使用 MyObject 的其他类需要对其进行各种比较(如果这有意义的话)。 nickf 提到了 Math.PI 的一个很好的例子。
    【解决方案2】:

    在窗口上下文中声明或不要使用'var'关键字:

    window.globalVar = somevalue
    globalVar = somevalue
    

    【讨论】:

    • yip,那是我的后备计划。但我更喜欢将它与“拥有”它的类一起使用。
    【解决方案3】:
    var MyClass = Class.extend({
    
            EVENT_NAME : 'event-name',
    
            init : function() {
                // ...
            }
            return {
                event_name: function() { return EVENT_NAME; }
            }
    
        });
        console.log( MyClass.event_name );
    

    实际上,老实说,我不确定上面的内容如何与.extend() 一起使用,因为我之前实际上没有使用过extend()。 但是,return { name:value } 技术是在对象中公开公共实例方法的一种非常常见的方式。应该不会花很长时间才能正确测试它,抱歉我没有机会自己做。

    【讨论】:

    • 我还要指出,目前您拥有的 EVENT_NAME : 'event-name' 一个全局变量,因为您没有 'var'前面。
    猜你喜欢
    • 2010-09-20
    • 1970-01-01
    • 2019-11-15
    • 2017-04-01
    • 2012-06-05
    • 1970-01-01
    • 2018-06-23
    • 2013-01-16
    • 2011-11-03
    相关资源
    最近更新 更多