我正在使用一种非常常见的名称空间模式,但希望对其进行扩展以传递第二个参数
I am using a very common namespacing pattern but want to extend it to pass a second parameter
我现在的命名空间是这样的
var MY = MY || {};
MY.namespace = function(str){};
基本上,你可以创建MY.namespace("new");
和My.new = function(){};
但现在,我想传递第二个参数,如MY.namespace("new", function(){});
。如何实现这个方法?
edit1:
var MY.namespace = function(ns_string){
var parts = ns_string.split('.'),
parent =MY,i;
if(parts[0]==="MY"){
parts = parts.slice(1);
}
for(i=0; i< parts.length ;i++){
if (typeof parent[parts[i]] ==="undefined"){
parent[parts[i]] ={};
}
parent = parent[parts[i]];
}
return parent;
};
您可以使用:
My.namespace = function(fnName, fnBody) {
My[fnName] = fnBody;
}
。
My.namespace('sayHi', function(){alert('hi');});
My.sayHi();
JavaScript对函数的参数数量没有限制。函数中的arguments
对象可以用来访问以类似数组的方式传递给函数的所有参数,即使它们没有在参数列表中命名:
My.namespace = function(fnName) {
// arguments[0] gives us the same things as fnName
// however, using indexes from 1 to (arguments.length-1)
// gives the other (nameless) parameters
}
不确定这是否是你的意思。考虑到你的编辑、凯文的回复以及你在评论中的建议,你的意思可能是:
var MY = {};
MY.namespace = function(ns_string, fnBody){
var parts = ns_string.split('.'),
parent =MY,i,
last = parts.slice(parts.length-1);
console.log(parent);
if(parts[0]==="MY"){
parts = parts.slice(1);
}
if (parts.length !== 1) {
parts = parts.slice(0, parts.length-1);
}
for(i=0; i< parts.length ;i++){
if (typeof parent[parts[i]] ==="undefined"){
parent[parts[i]] ={};
}
parent = parent[parts[i]];
}
parent[last] = fnBody;
return parent;
};
就像
> MY.namespace('ns1.ns2.myFn', function(console.log('this is myFn')));
> MY.ns1.ns2.myFn();
this is myFn
相关文章:
- Javascript,访问一个主要对象模块模式中的每个对象
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 试图在引导模式内动态生成图表,得到offsetWidth错误
- Amd,希望确保某个东西总是最后执行
- 我想使用模态通过php文件发送邮件,并且我希望在提交关闭后关闭pop
- 同位素库错误:未捕获错误无布局模式包装生产线8
- 在DOM中查找一个模式并替换它's的内容使用jquery
- 如何缩短MongoDB ObjectId并在Mongoose模式中使用它
- D3.js模式不适用于弧形或圆环图
- 我希望只有在我滚动页面后才能显示我的返回页首图标
- Webdriver.io pageObject模式-通过传递参数来定义元素选择器
- 模块模式和这个
- 带有let的JS/EECMAScript6私有字段的模式
- 我是否可以检测到javascript正在被卸载(作为调试模式)
- 执行动态模式弹出
- 注意:wp_enqueue_script调用不正确.在 Wordpress 调试模式下
- emacs JavaScript字体锁定模式:希望突出显示'self'就像'这'
- 希望在SVG元素上组合CSS填充颜色和SVG模式
- 我正在使用一种非常常见的名称空间模式,但希望对其进行扩展以传递第二个参数
- AngularJS SEO使用HTML5模式:希望能清楚地了解这在幕后的作用