为什么我的锚不能解雇这个javascript对象?

时间:2011-07-07 09:28:07

标签: javascript html

我有一个包含链接的javascript对象的页面:

//the constructor function
function NewsScroller() {

}


//now put some config objects using the JSON structure
NewsScroller.prototype.config = {
    serviceUrl : '/NewsProvider.svc/rest/GetNews/',
    pageIndex : 0
}


//the argumented constuctor for this object
NewsScroller.prototype.init = function () {


    this.getNews(this.config.pageIndex);
    console.log(this.config.pageIndex);

}

NewsScroller.prototype.decreasePage = function () {

    console.log('current page index ' + this.config.pageIndex);

}

然后我有页面准备声明:

<script>
        $(document).ready(function () {

            var newsScrollerForPage = new NewsScroller();
            newsScrollerForPage.init();

            newsScrollerForPage.decreasePage();

        });

    </script>

产生结果:

  

当前页面索引0

我想从锚标记中调用该函数,所以我有:

<div class="scroller-left">
    <a id="scroller-left-a" href="javascript:newsScrollerForPage.decreasePage();">
        <img src="/Images/Left-Scroller.jpg"/>
    </a>
</div>

但是当我点击锚时,我得到了:

  

newsScrollerForPage未定义

这是为什么?当然,我应该能够像在.ready方法中那样调用对象和函数吗?

1 个答案:

答案 0 :(得分:1)

使用本地范围(通过使用“var”)在ready函数内定义newsScrollerForPage,除非在同一范围内定义使用它的函数,否则不能在那里使用它(范围从哪里评估)定义函数,而不是从它们被调用的地方定义。

你可以通过从它之前删除var来快速解决问题(使其更具全局性而非局部性)但我不建议将其作为最佳解决方案。

最好将这样的锚链接起来:

    $(document).ready(function () {

        var newsScrollerForPage = new NewsScroller();
        newsScrollerForPage.init();

        newsScrollerForPage.decreasePage();

        document.getElementById("scroller-left-a").onclick=function()
        {
             newsScrollerForPage.decreasePage();
             return false;
        }

    });

并从HTML元素中删除href。