以下方法在Javascript中声明命名空间的方法是否错误?它来自我正在阅读的书,似乎在我的代码中不起作用。
<script type="text/javascript">
var mynamespace = {};
if(Drupal.jsEnabled){
$(document).ready(mynamespace.init);
}
mynamespace.init = function() {
$("#mybutton").bind("click",function(){
alert('hello');
});
}
</script>
答案 0 :(得分:2)
看起来您的代码依赖于jQuery。确保在运行此脚本之前已加载。另外,在调用函数之前定义它。试试这个:
var mynamespace = {};
mynamespace.init = function() {
$("#mybutton").bind("click",function(){
alert('hello');
});
}
if(Drupal.jsEnabled){
$(document).ready(mynamespace.init);
}
答案 1 :(得分:1)
这里似乎出现的问题是mynamespace.init函数在你将它连接到$(document).ready时没有定义。
这应该按预期工作:
<script type="text/javascript">
var mynamespace = {};
mynamespace.init = function() {
$("#mybutton").bind("click",function(){
alert('hello');
});
}
if(Drupal.jsEnabled){
$(document).ready(mynamespace.init);
}
</script>
您也可以考虑将其形成为这样,因为它更容易理解(至少对我而言)
<script type="text/javascript">
var mynamespace = {
init : function() {
$("#mybutton").bind("click",function(){
alert('hello');
})
};
if(Drupal.jsEnabled){
$(document).ready(mynamespace.init);
}
</script>
答案 2 :(得分:1)
小心使用$(document).ready(mynamespace.init);
。以这种方式执行时,this
不再是mynamespace
的引用,通常它等于window
,但jQuery在后台执行一些call
魔法设置它等于document
。在这种情况下,它不会伤害到你,但在将来要警惕它。
$(document).ready(function () {
mynamespace.init();
});
我是怎么做的。
在这种情况下,代码无效的原因是mynamespace的init方法未在文档$(document).ready(mynamespace.init)
上定义。
答案 3 :(得分:0)
令我感到奇怪的是,至少在C#中工作,是命名空间不应该直接包含代码逻辑。在C#中它不能,这就是类的用途。所以对我来说,在名称空间上使用init函数是一个矛盾。
答案 4 :(得分:0)
是的,您可以使用object作为命名空间。形成命名空间的另一种方法是使用closures:
(function(inner_variable_1, inner_variable_2) {
// define whatever here, they won't pollute namespace outside this closure
})(outer_variable_1, outer_variable_2);
流行的例子是jQuery的noconflict-mode,它允许你在你的jQuery代码中使用$ variable而不需要$ a全局变量,从而将全局$留给另一个用途。