Javascript 未定义页()错误消息

Javascript 未定义页()错误消息,javascript,Javascript,我从Firebug收到一条page()未定义的错误消息,其中包含以下Javascript。为什么? ( function() { var page = function() { var min_central_width = 10; function minimumCentralWidth(val) { min_central_width = val; } } $(document).ready(f

我从Firebug收到一条
page()未定义的
错误消息,其中包含以下Javascript。为什么?

( function() {
    var page = function() {
        var min_central_width = 10;
        function minimumCentralWidth(val) {
            min_central_width = val;
        }
    }

    $(document).ready(function() {
        page().minimumCentralWidth(400);
    });

})();

我对Javascript还是新手。如何避免这种情况?

问题是
page
没有返回值,因此
page()
未定义的
。你必须这样写:

( function() {
    var page = function() {
        // create an object to return:
        var ret = {};
        // set its properties:
        ret.min_central_width = 10;
        ret.minimumCentralWidth =
            function (val) {
                this.min_central_width = val;
            };
        // return it:
        return ret;
    };

    $(document).ready(function() {
        page().minimumCentralWidth(400);
    });

})();
( function() {
    var page = new function() { //single instance of your page class
        var min_central_width = 10;
        this.minimumCentralWidth = function (val) {
            min_central_width = val;
            alert('set to ' + val);
        }
    }

    $(document).ready(function() {
        page.minimumCentralWidth(400);
    });

})();

。但以上这些并不能真正起到任何作用。它创建一个新对象,并将对象的
min\u central\u width
设置为
400
。但是它没有将对象用于任何用途,因此上面的内容没有任何有意义的效果。(这仅仅是因为您删除了与问题无关的代码吗?如果是这样,那就没关系了。:-

尽管这里有一些很好的答案,但我想再添加一些,以根据您的操作提供一些可能的选项

如果确实希望使minimumCentralWidth成为页面类的属性,可以执行以下操作:

( function() {
    var page = function() {
        var min_central_width = 10;
        this.minimumCentralWidth = function (val) {
            min_central_width = val;
            alert('set to ' + val);
        }
    }

    $(document).ready(function() {
        var p = new page(); //new up your object
        p.minimumCentralWidth(400);
    });

})();
如果您试图模拟静态实用程序类,可以执行以下操作:

( function() {
    var page = function() {
        // create an object to return:
        var ret = {};
        // set its properties:
        ret.min_central_width = 10;
        ret.minimumCentralWidth =
            function (val) {
                this.min_central_width = val;
            };
        // return it:
        return ret;
    };

    $(document).ready(function() {
        page().minimumCentralWidth(400);
    });

})();
( function() {
    var page = new function() { //single instance of your page class
        var min_central_width = 10;
        this.minimumCentralWidth = function (val) {
            min_central_width = val;
            alert('set to ' + val);
        }
    }

    $(document).ready(function() {
        page.minimumCentralWidth(400);
    });

})();

如果您对这些示例如何工作有任何具体问题,请告诉我,我将尝试添加更多细节

是的,我只是尝试用一个简单的代码示例来复制这个问题。是的,我确实有一个问题。在第一个示例中,var p=new page();创建一个新的页面实例,就像Java中的new一样?意思是,如果我修改一个实例,其他实例就不会被修改?是的,这是非常正确的。您在
p
中更改的任何属性都不会影响您新建的其他实例,因为每个实例都在自己的闭包中运行。