[转]---js中实现namespace(名字空间)的一种方法。

BlueDestiny 2006-05-12 11:19:09
51js上 月影 写的

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>

<BODY>
<script>
__namespace__({com:{akira:{test:
(function(){
function A()
{
A.prototype.a = function(){alert('A in a');}
}
function B()
{
B.prototype.a = function(){alert('A in b');}
}B.prototype = new A(),B.prototype.base = new A();
return {A:A,B:B};
})()
}}})


var a = new com.akira.test.A();
a.a();
try{a = new A();}catch(e){alert("Class A not found in __global__!");}
__using__(com.akira.test);
var b = new B();
b.a();
__unlink__(com.akira.test);
try{b = new B();}catch(e){alert("Class B not found in __global__!");}
with(com.akira.test)
{
var c = new B();
c.base.a();
}

/********************************************************
Javascript namespaces V1.00 author Akira
*********************************************************/
function __namespace__(ns,parent)
{
if(parent == null) parent = self;
for(var each in ns)
{
if(parent[each] != null)
__namespace__(ns[each],parent[each]);
else
parent[each] = ns[each];
}
return;
}
function __using__(ns)
{
for(var each in ns)
if(self[each]==null) self[each] = ns[each];
}
function __unlink__(ns)
{
for(var each in ns)
{
if(self[each] == ns[each]) self[each] = null;
}
}
</script>
</BODY>
</HTML>
...全文
599 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
crore 2006-05-26
  • 打赏
  • 举报
回复
路过,不太懂
PrudentWoo 2006-05-19
  • 打赏
  • 举报
回复
能否看看你的namespace示例
meizz 2006-05-16
  • 打赏
  • 举报
回复
namespace 我早在使用了,比如 Using("System.Web.UI.WebControls.MzTreeView");
且只看你提供的这段示例,还是停留在很初级的阶段。
xuzuning 2006-05-16
  • 打赏
  • 举报
回复
很难设想“名字空间”在脚本级语言中有什么用途
hansonboy 2006-05-16
  • 打赏
  • 举报
回复
不太熟悉,能否解释一下
ice_berg16 2006-05-16
  • 打赏
  • 举报
回复
YahooUI里也实现在这个功能,代码如下


var YAHOO = function() {

return {

/**
* Yahoo presentation platform utils namespace
*/
util: {},

/**
* Yahoo presentation platform widgets namespace
*/
widget: {},

/**
* Yahoo presentation platform examples namespace
*/
example: {},

/**
* Returns the namespace specified and creates it if it doesn't exist
*
* YAHOO.namespace("property.package");
* YAHOO.namespace("YAHOO.property.package");
*
* Either of the above would create YAHOO.property, then
* YAHOO.property.package
*
* @param {String} sNameSpace String representation of the desired
* namespace
* @return {Object} A reference to the namespace object
*/
namespace: function( sNameSpace ) {

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

var levels = sNameSpace.split(".");

var currentNS = YAHOO;

// YAHOO is implied, so it is ignored if it is included
for (var i=(levels[0] == "YAHOO") ? 1 : 0; i<levels.length; ++i) {
currentNS[levels[i]] = currentNS[levels[i]] || {};
currentNS = currentNS[levels[i]];
}

return currentNS;

}
};

} ();
BlueDestiny 2006-05-16
  • 打赏
  • 举报
回复
YAHOO.namespace实际上就是这个

<script language="javascript">

function __using(ns)
{
var nsParts = ns.split(".");
var root = window;

for(var i=0; i<nsParts.length; i++)
{
root[nsParts[i]] = root[nsParts[i]] || {};
root = root[nsParts[i]];
}
return root;
}

var com={
f : function() {
alert("com function");
},
util : {
f : function() {
alert("com.util function");
}
}
};

var b=__using("com");
b.f();
var c=__using("com.util");
c.f();
</script>
BlueDestiny 2006-05-16
  • 打赏
  • 举报
回复
to 唠叨:

为了脚本的清淅方便利用,有的时候很有必要加入namespace的功能。
BlueDestiny 2006-05-16
  • 打赏
  • 举报
回复
to: meizz

能否看看你的namespace示例
dh20156 2006-05-15
  • 打赏
  • 举报
回复
支持!
BlueDestiny 2006-05-13
  • 打赏
  • 举报
回复
看来结论有两个(或许还不该这么早下结论)
1、关心js's namespace的人少。
2、还不知道namespace的人也不在少数


再放几天就结贴
Scarroot 2006-05-13
  • 打赏
  • 举报
回复
mark

87,921

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧