打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Javascript经验总结-001:JS命名空间的模仿实现
//*****************************************************************************************************************************************
//--------------------------------------------------------------注册命名空间--方式01-----------------------------------------------------------
//*****************************************************************************************************************************************
Namespace = new Object();// 声明一个全局对象Namespace,用来注册命名空间

// 全局对象仅仅存在register函数,参数为名称空间全路径,如"TRE.object"
Namespace.register = function(fullNS)
{
    // 将命名空间切成N部分, 比如TRE、object等
    var nsArray = fullNS.split('.');
    var sEval = "";
    var sNS = "";
    for (var i = 0; i < nsArray.length; i++)
    {
        if (i != 0) {sNS += ".";}
         sNS += nsArray[i];
        // 依次创建构造命名空间对象的语句(假如不存在的话)
        // 比如先创建TRE,然后创建TRE.object,依次下去
         sEval += "if (typeof(" + sNS + ") == 'undefined') " + sNS + " = new Object();"
     }
 
    if (sEval != "") 
{
eval(sEval);
}
}

// 注册命名空间TRE.sql, TRE.util等
Namespace.register("TRE.sql");
Namespace.register("TRE.util");
Namespace.register("TRE.IO");
Namespace.register("TRE.IO.File");
Namespace.register("TRE.object");

// TRE.object命名空间里面声明类Person
TRE.object.Person = function(name, age)
{
    this.name = name;
    this.age = age;
this.say = function(sayConment){
alert(this.name + "(" + this.age + "years old)is saying: " + sayConment);
};
}

// 演示如何使用类Person
var p = new TRE.object.Person("zlc", 23);
p.say('Hello');

//*****************************************************************************************************************************************
//--------------------------------------------------------------注册命名空间--方式02-----------------------------------------------------------
//*****************************************************************************************************************************************

var TRE = window.TRE || {};

TRE.namespace = function(ns) {

    if (!ns || !ns.length) {return null;}

    var levels = ns.split(".");
    var nsobj = TRE;

    for (var i=(levels[0] == "TRE") ? 1 : 0; i<levels.length; ++i) {
         nsobj[levels[i]] = nsobj[levels[i]] || {};
         nsobj = nsobj[levels[i]];
     }
    return nsobj;
};

TRE.extend = function(subclass, superclass) {
    var f = function() {};
     f.prototype = superclass.prototype;
     subclass.prototype = new f();
     subclass.prototype.constructor = subclass;
     subclass.superclass = superclass.prototype;
    if (superclass.prototype.constructor == Object.prototype.constructor) {
         superclass.prototype.constructor = superclass;
     }
};

TRE.namespace("util");
TRE.namespace("sql");
TRE.namespace("IO");

//*****************************************************************************************************************************************
//--------------------------------------------------------------XXXXXXXXXXXXXXXX-----------------------------------------------------------
//*****************************************************************************************************************************************
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
js的命名空间
JavaScript 面向对象编程
JS 控件 jQuery扩展函数
JS继承
在JavaScript中创建命名空间的几种写法
aaa
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服