为什么我会得到这个JavaScript ReferenceError

Jon*_*ony 3 javascript jquery

出了什么问题.我尝试制作对象,但是当我尝试初始化时,我在控制台中收到此错误:我尝试将所有内容放入document.ready和whitout,但不起作用.在这两种情况下我都有一些错误.对于愚蠢的问题,我很抱歉

ReferenceError: Circle is not defined
    var obj = new Circle;
Run Code Online (Sandbox Code Playgroud)

JS

$(function(){
        var Circle = {

                init: function() {
                    console.log("Circle initialized");
                }     
        };

});
Run Code Online (Sandbox Code Playgroud)

HTML

<!DOCTYPE html>
<html>
    <head>

        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
        <script src="javascript/circle.js"></script>

        <script>           

               $(document).ready(function(){
                   var obj = new Circle;

                   obj.init();
               })

        </script>

    </head>
    <body>
        <div id="test" >TODO write content</div>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

新的更新

$(function(){

        window.Circle = {

                init: function() {
                    console.log("Circle initialized");
                }     
        };
       window.Circle.init();
});
Run Code Online (Sandbox Code Playgroud)

....

  <head>

     <script>           

        window.Circle().init();

    </script>

</head>
Run Code Online (Sandbox Code Playgroud)

Poi*_*nty 9

您已另一个函数中定义了"Circle"函数- 您作为"ready"处理程序传递的匿名函数.因此,该符号("Circle")对该函数是私有的,而对其他代码不可见.

你可以像这样全局化:

window.Circle = {
  // ...
};
Run Code Online (Sandbox Code Playgroud)

您也可以将它添加到jQuery命名空间(可能适合也可能不适合;取决于您正在做什么),或者您可以为应用程序代码开发自己的命名空间.或者,最后,您可以考虑组合您的jQuery"ready"代码,以便"Circle"对象和使用它的代码都出现在同一个处理程序中.

编辑 - 另一种可能性是将"Circle"声明完全移出"ready"处理程序.如果您所做的只是初始化该对象,并且您的属性值不需要任何需要DOM或其​​他尚未可用资源的工作,那么您可以摆脱$(function() { ... })包装器.