我是javascript的新手。我很困惑,javascript对象!!
我的代码框架在下面......
var jCanvas = new function(){
this.init = function(canvasID){
...
};
var DrawingManager = new function(){
drawInfos = []; // DrawInfo objects will be pushed into this
this.mouseState = MouseState.released;
...
};
function DrawInfo(bm, cl, id, x, y){
...
}
function Point(x, y){
...
}
var MouseState = new function(){
...
};
var Color = new function(){
...
};
var BrushMode = new function(){
...
};
};
问题是浏览器给出的错误是“MouseState未定义”。
我觉得我对Java,C#等太熟悉了......我希望我的程序结构很好但是这个javascript让我很困惑,不知道如何制作好的设计模式..
请帮帮我..
答案 0 :(得分:2)
要声明功能,请不要使用new
关键字。仅在创建对象实例时使用它。
在JavaScript中,您可以声明一个"类"像这样(函数的主体是构造函数):
function MyClass (arg1) {
this.myClassProperty = arg1;
}
然后实例化它:
var myObj = new MyClass();
如果要创建单例,最好的方法是使用立即调用的函数:
var MySingleton = (function() {
var myPrivateFunction = function() { ... };
var myExportedFunction = function() { ... };
var myPrivateVar = 5;
return {
myExportedFunction: myExportedFunction
};
})();
在这里,您创建一个匿名函数并立即运行它。虽然这是一种更先进的概念。 或者您可以简单地创建一个对象:
var MySingleton = {
myProperty: 1,
myFunction: function() { ... },
...
};
答案 1 :(得分:1)
JavaScript中的Singleton类毫无意义。要么构造一个(Java人员的“类”)来实例化多个对象,要么创建一个对象。制作一个只能使用一次的构造函数是没有意义的,然后让代码进行完整性检查,确定你是否真的只使用过一次。只需制作一个物体。
错误的原因可能是(但我可能错了,我猜错了代码的其余部分)var x = function ...
和function name() ...
形式之间的误解。致白:
var a = function() { console.log("a"); }
function b() { console.log("b"); }
a(); // a
b(); // b
c(); // c
d(); // TypeError: d is not a function
function c() { console.log("c"); }
var d = function() { console.log("d"); }
它们的效果相同,但它们是否悬挂在示波器的顶部是不同的。 var d
被提升,就像function c() { ... }
一样 - 所以变量d
将会存在,但会undefined
,因为分配不会被提升。除非你有充分的理由,否则两种函数声明样式都是不一致的;选择其中一个并坚持下去,这就是我的建议。