有人可以通过以下Javascript告诉我 -
1)如何使用“Base”变量?
2)在callShowMsg函数中,局部变量“ns”用于别名空间。
是否可以使用全局变量来命名空间?它将避免在每个函数中声明局部变量。
提前致谢。
我的代码是,
var Base = namespace("MyCo.MyApp.Myprogram");
MyCo.MyApp.Myprogram =
{
showMsg: function (pMsg)
{
alert(pMsg);
},
callShowMsg: function (pMsg)
{
var ns = MyCo.MyApp.Myprogram;
ns.showMsg('Hello');
}
}
答案 0 :(得分:0)
类似的东西:( YUI带有一些自定义命名空间的后备)。虽然我相信你不必“命名空间”或引用obj。只需将其称为“此”即可。 所以,如果你在obj中,你可以调用这样的方法:this.showMsg('somevalue')
function createNamespace() {
var uniqueNS = "MyCo";
var a = arguments, o, i = 0, j, d, arg,
ns = this,
PERIOD = ".";
// force namespace to MyCo
ns.uniqueNS = ns.uniqueNS || {};
ns = ns.uniqueNS;
for (; i < a.length; i++) {
o = ns; //Reset base object per argument or it will get reused from the last
arg = a[i];
if (arg.indexOf(PERIOD) > -1) { //Skip this if no "." is present
d = arg.split(PERIOD);
for (j = (d[0] == uniqueNS) ? 1 : 0; j < d.length; j++) {
o[d[j]] = o[d[j]] || {};
o = o[d[j]];
}
} else {
o[arg] = o[arg] || {};
o = o[arg]; //Reset base object to the new object so it's returned
}
}
return o;
}
var Base = createNamespace("MyCo.MyApp.Myprogram");
Base =
{
showMsg: function (pMsg)
{
alert(pMsg);
},
callShowMsg: function (pMsg)
{
this.showMsg(pMsg);
}
}
Base.showMsg('ok');
答案 1 :(得分:0)
我不认为像上面写的那样有像命名空间这样的函数, 你可以这样做:
var MYAPPLICATION = {
calculateVat: function (base) {
return base * 1.21;
},
product: function (price) {
this.price = price;
this.getPrice = function(){
return this.price;
};
},
doCalculations: function () {
var p = new MYAPPLICATION.product(100);
alert(this.calculateVat(p.getPrice()));
}
}
或者如果您想使用嵌套的命名空间,可以试试这个:
var MYAPPLICATION = {
MODEL: {
product: function (price) {
this.price = price;
this.getPrice = function(){
return this.price;
};
}
},
LOGIC: {
calculateVat: function (base) {
return base * 1.21;
},
doCalculations: function () {
var p = new MYAPPLICATION.MODEL.product(100);
alert(this.calculateVat(p.getPrice()));
}
}
}
答案 2 :(得分:0)
如何使用“Base”变量?
这将取决于namespace
函数返回的值。这不是一个标准的JS函数,它可能特定于你正在使用的库,所以我无法回答。
是否可以使用全局变量来命名空间?
当然。
var ns = {
callShowMsg: function (pMsg)
{
ns.showMsg('Hello');
}
}
MyCo.MyApp.Myprogram = ns;
您还可以将ns放入一个本地函数而不是全局函数,方法是将它放在一个初始化函数中,将其置于脚本顶层。最常见的方法是使用立即调用的匿名函数:
(function(){
var ns = {
callShowMsg: function (pMsg)
{
ns.showMsg('Hello');
}
}
MyCo.MyApp.Myprogram = ns;
}());