为什么我会得到这个JavaScript ReferenceError

时间:2013-08-10 14:13:28

标签: javascript jquery

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

ReferenceError: Circle is not defined
    var obj = new Circle;

JS

$(function(){
        var Circle = {

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

});

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>

NEW UPDATE

$(function(){

        window.Circle = {

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

....

  <head>

     <script>           

        window.Circle().init();

    </script>

</head>

2 个答案:

答案 0 :(得分:9)

你已经定义了你的“圆圈”功能里面另一个功能 - 你作为“准备好”处理程序传入的匿名函数。因此,该符号(“Circle”)对该函数是私有的,而对其他代码不可见。

你可以像这样全球化:

window.Circle = {
  // ...
};

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

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

答案 1 :(得分:1)

1)您在功能上下文中分配Circle,而不是全局。除非将其暴露给全局,否则您只能在那里使用它。 2)您将Circle视为构造函数,但Circle不是函数。

这解决了这两个问题:

var Circle = function () {};
Circle.prototype.init = function () {
    console.log('Circle initialized.');
};
var obj = new Circle();
obj.init();