用于编写javascript对象的最干净的格式

Zoi*_*erg 1 javascript

编写javascript对象的最简洁格式是什么?

目前我用以下格式写我的

if (Namespace1 == null) var Namespace1 = {};
if (Namespace1.NameSpace2 == null) Namespace1.NameSpace2 = {};

Namespace1.NameSpace2.Class1 = function(param1,param2){
     // define private instance variables and their getters and setters
     var privateParam = param1;
     this.getPrivateParam = function() {return privateParam;}
     this.publicParam1 = param2;
}

Namespace1.Namespace2.Class1.prototype = {
     publicParam1:null,
     publicFunction1:function() {/* Function body*/}
}
Run Code Online (Sandbox Code Playgroud)

这种格式现在运行良好,因为YUI文档软件能够解析它,评论和回馈良好的文档.但它没有提供的是在命名空间中声明静态全局方法的简洁方法.我也想知道是否有更简洁的方法来声明私有变量.

我的问题是,有没有人有一个更清晰的方法来定义javascript对象,如果是这样,为什么你的方法更好?

谢谢!

Eli*_*rey 5

首先,如果您不知道是否Namespace1已定义,请使用typeof this.Namespace1 !== "undefined",因为如果未定义,则访问Namespace1将引发错误.此外,未定义的属性undefined不是null(虽然undefined == null).如果某些内容实际为空,则您的检查将失败.如果您不想typeof用于检查属性是否未定义,请使用myObject.property === undefined.

此外,您的第二个示例语法无效.这是我认为你想做的事情:

Namespace1.Namespace2.Class1.prototype = {
     publicParam1    : null,
     publicFunction1 : function () {/* Function body*/}
};
Run Code Online (Sandbox Code Playgroud)


小智 5

模块模式可以帮助您:

 var Namespace1 = Namespace1 || {};
    Namespace1.Namespace2 = Namespace1.Namespace2 || {};

    Namespace1.Namespace2.Class1 = function(param1, param2) {
        // define private instance variables and their getters and setters
        var privateParam = param1;
        this.getPrivateParam = function() { return privateParam; }
        this.publicParam1 = param2;

        return {
            init: function() {
                alert('hi from Class1');
            }
        }
    } ();
Run Code Online (Sandbox Code Playgroud)

你可以在这里阅读更多相关信息:http://yuiblog.com/blog/2007/06/12/module-pattern/

    Namespace1.Namespace2.Class1.init();
Run Code Online (Sandbox Code Playgroud)