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:
Post a Comment