编写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对象,如果是这样,为什么你的方法更好?
谢谢!
首先,如果您不知道是否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)