在发现Javascript命名空间后,我尝试实现它们,但是在尝试将命名空间方法附加到元素的onclick时遇到了问题。
我用这个方法来包装我的函数/方法/类(一个简化的概念,而不是我的实际代码):
;(function(window, undefined) {
//my namespace
var NS = {};
NS.test = {
f : function(param) {
alert(param);
}
}
NS.test.('test 2');
})(window);
在内部,一切正常,并提示“测试2”。
但是,当我尝试将该功能附加到点击事件时,通过执行以下操作:
<a href-"#" onclick="NS.test.f('test');">Click me!</a>
它不起作用,就像我在})(window);
部分之后调用该函数时不起作用。
我尝试将其称为window.NS.test.f('test');
,但没有效果。
如何让onclick事件调用我的函数?
我可以在我的包装器中附加一个事件监听器,就像我对其他html元素一样没有任何困难,但在这种情况下会有问题,因为我用javascript生成链接,我发现它更简单,更简单为我的所有链接添加onclick="doSomething"
,而不是创建它们,然后缓存它们并添加事件侦听器。
叫我懒惰,但在这种特殊情况下我更喜欢
someDiv.innerHTML = my_Generated_Html_Code_With_OnClick;
而不是
//demo code, ignore the flaws and the fact it won't work on IE
someDiv.innerHTML = my_generated_Html_code;
myLink = document.getElementById(id);
myLink.addEventListener('mousedown', NS.test.f('test'));
我不使用任何框架,也不希望,因为我试图更好地理解所谓的vanilla javascript。
我设置了一个jsfiddle here。
P.S。我必须承认我完全不理解命名空间,所以如果我在这里做错了或以我不应该的方式应用这个概念,我会很感激任何提示或更正
答案 0 :(得分:4)
那是因为NS
在内部声明,因此只存在于函数内:
function(window, undefined) {
var NS = {};
// NS exists here ...
}
// ... but not here
如果您希望将其提供给页面的其余部分,则可以执行以下操作:
function(window, undefined) {
var NS = window.NS = {};
// NS and window.NS exist here ...
}
// ... and window.NS exists here.