我对JS比较陌生,我遇到了正确模拟OOP原则的问题。JavaScript类和可变范围
我想我有两个问题。质疑第一个是关于许多方法来声明变量。
说我有一个类:
function clazz(a)
{
this.b = 2;
var c = 3;
this.prototype.d = 4; // or clazz.prototype.d = 4?
}
var myClazz = new clazz(1);
我是正确的以下评估:
一个是私有变量,例如特定的(即不同clazz中的情况下,将具有独特的变量和自变量'一个')。它可以从clazz内部访问为:'a'。
b是一个实例特定的公共变量。它可以从clazz内部作为'this.b'和外部clazz作为'myClazz.b'访问。
c是一个静态或类特定的私有变量(即不同的clazz实例将共享相同的'c'变量)。它可以在clazz的任何实例中作为'c'访问,clazz实例中的变化反映在所有clazz实例中。
d是一个静态/类特定的公共变量。它可以通过'clazz.prototype.d'或'myClazz.prototype.d'从任何地方访问。
整体的问题,我有我的变量方案的理解是,有没有办法来声明一个私有变量不是静态的(即独特的换版之类的每个实例)。
第二个问题是针对不同类型的声明。
我一直在使用:
var MySingleton = new function() {...};
创建单身。它是否正确?我也不能确定为在这种情况下,“新”的关键字的效果以及追加()函数括号来声明的结尾像这样:
var MySingleton = new function() {...}();
我一直在使用这个模式声明一个类然后实例化该类的实例:
function myClass() {...};
var classA = new myClass();
var classB = new myClass();
这是正确的方法吗?
+1。一个非常完整和信息丰富的答案。 – 2009-11-30 23:51:17
谢谢您提供的信息。 后续工作:单件声明的模块方法和原始文章中引用的样式之间的有形差异是什么? – Cmc 2009-12-01 15:41:03
** @ Lior:**谢谢!,** Cmc:**我写了一些关于你发布的语法...... – CMS 2009-12-01 17:06:59