出错了什么。我尝试制作对象,但是当我尝试初始化时,我在控制台中收到此错误:我尝试将所有内容放入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>
答案 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();