3

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

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>

新更新

$(function(){

        window.Circle = {

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

……

  <head>

     <script>           

        window.Circle().init();

    </script>

</head>
4

2 回答 2

9

你已经另一个函数中定义了你的“Circle”函数——你作为一个“就绪”处理程序传入的匿名函数。因此,该符号(“Circle”)对该函数是私有的,对其他代码不可见。

您可以像这样使其全局化:

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

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

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

于 2013-08-10T14:14:21.923 回答
1

1)您在函数上下文中分配 Circle,而不是全局。除非您将其公开给全局,否则您只能在此处使用它。2)您将 Circle 作为构造函数调用,但 Circle 不是函数。

这解决了两个问题:

var Circle = function () {};
Circle.prototype.init = function () {
    console.log('Circle initialized.');
};
var obj = new Circle();
obj.init();
于 2013-08-10T14:35:05.430 回答