javascript - 自定义对象内的范围问题

标签 javascript jquery object scope

我认为我遇到了范围可见性问题,我无法准确地弄清楚:当我记录变量 displayatonce 时,我得到了正确的结果,但是当我尝试使用按钮时,我得到了没有任何返回。我也尝试过记录 this.navbuttons 但我得到的只是一个空集...我真的不明白这段代码有什么问题。

<!-- html code -->
<div id="nav">
<a href="#" data-dir="prev">Previous</a>
<a href="#" data-dir="next">Next</a>
</div>

/* Js Script with jQuery */
(function() {

var NewsNavigator = {

    init: function(config) {
        this.navbuttons = config.navbuttons;
        this.displayatonce = config.displayatonce;
        this.counter = 0;
        this.showNews();
        this.enableNav();

    },

    showNews: function() {
        console.log(this.displayatonce);
    },

    enableNav: function() {
                    console.log(this.navbuttons);
        this.navbuttons.on('click', function() {
            console.log("clicked");
        });
    }

};

NewsNavigator.init({
    displayatonce: 3,
    navbuttons: $('div#nav').find('a')
});
})();

最佳答案

发生这种情况是因为当您使用立即执行函数的 (function())(); 时,可能它正在运行 dom is ready 之前的代码。

下面的演示一切正常

DEMO

将所有代码放入文档就绪中,或者至少在文档就绪 block 中调用initialize方法,例如

 $(function(){
    NewsNavigator.init({
        displayatonce: 3,
        navbuttons: $('div#nav').find('a')
    });
});

在此处阅读有关Javascript自执行匿名函数的更多信息

Javascript self executing function "is not a function"

http://markdalgleish.com/2011/03/self-executing-anonymous-functions/

关于javascript - 自定义对象内的范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10881854/

相关文章:

javascript - "combine this with previous var . . ."声明

Javascript:从自定义 API 将许多图像加载到 DOM 中,无需使用 base64-dataURLs

javascript - 如何从元素数量由 Object.values 确定的对象生成数组?

javascript - 用javascript合并两个对象数组

javascript - 获取数组中的对象,该对象具有一个属性,该属性是一个包含匹配值的数组

javascript - 将JS中下拉列表的值解析为php

jquery - 无法将 div 表中的单元格保持在 50%

jquery - 单击事件未绑定(bind)到由 ajax 动态加载的内容

jquery - 如何在对话框内的 Jquery 中更新表格/表单内的 div 文本?

javascript - 为集合中的每个对象添加新属性