Javascript 的命名空间、类、属性和方法

Saturday, April 21, 2007

今天在网上看了一些实现Javascript 的命名空间、类、属性和方法的文章,下面是我自己尝试的代码,由于对Javascript这种prototype型的语言的理解不是很深,理解可能有误,还好实现应该没有问题的:-)

一. 命名空间:分为两个部分。第一个部分是注册函数,另外一部分是声明命名空间

命名空间注册函数,参照yui的方式,注意这种方式下所有的命名空间的第一级都是sacranto。

   1: var sacranto = {};
   2: sacranto.namespace=function(ns){
   3:     if(!ns||!ns.length){
   4:         return null;
   5:     }
   6:     
   7:     var levels = ns.split(".");
   8:     var nsobj=sacranto;
   9:     
  10:     for(var i=(levels[0] == "sacranto")?1:0;i<levels.length;i++){
  11:         nsobj[levels[i]]=nsobj[levels[i]]||{};
  12:         nsobj = nsobj[levels[i]];
  13:     }
  14:     
  15:     return nsobj;
  16: };    

声明命名空间的语句,这样我们就注册了一个sacranto.demo命名空间。

   1: sacranto.namespace("demo");

二. 类:对于prototype类型的语言,函数其实就是类,声明一个函数其实就声明了一个类,并且他还是是类的静态构造函数。下面的语句声明了一个类,静态构造函数里面什么也没有做。

   1: sacranto.demo.aclass = function(){};

三. 类的属性和方法:这里就需要使用到prototype这个特性了

   1: sacranto.demo.aclass.prototype = {
   2:     //属性
   3:     version: "1.0",
   4:     //方法
   5:     bar: function(s){
   6:         return "hello " + s;
   7:     }
   8: };

四. 静态方法:仿佛在javascript里面应该没有静态方法这个概念吧。我的理解是这样的

   1: //我理解的静态方法,其实是另外一个类和它的静态构造函数。
   2: sacranto.demo.aclass.foo=function(s){
   3:     return "hello "+s;
   4: }

OK,完成,测试一下吧

   1: window.onload = function(){
   2:     var aobj=new sacranto.demo.aclass();
   3:     alert(aobj.bar("world"));                    //成功
   4:     //alert(sacranto.demo.aclass.bar("world"));    //失败
   5:     alert(sacranto.demo.aclass.foo("world"));    //成功
   6: };

 

延伸阅读:

Private Members in JavaScript 英文:讨论了类中的私有成员

prototype的一个优势也是缺点    中文:prototype实现类的属性和方法,以及在运行时刻会改变的特点。

 

PS:取消 使用IE打开包括JavaScript 的本地web页时收到安全警告 方法

1. 在 工具 菜单上, 单击 Internet选项
2. 单击 高级 选项卡
3. 在 设置 列表, 确定依次选中 安全--允许活动内容在本机上的文件中运行。此选项允许您运行脚本和 ActiveX 控件在 InternetExplorer 中
4. 在 文件 菜单上, 单击 关闭

0 COMMENTS: