我是JS的新手,我遇到了正确模仿OOP原则的问题.
我想我有两个问题.问题首先是关于声明变量的许多方法.
说我有一节课:
function clazz(a)
{
this.b = 2;
var c = 3;
this.prototype.d = 4; // or clazz.prototype.d = 4?
}
var myClazz = new clazz(1);
Run Code Online (Sandbox Code Playgroud)
我在以下评估中是否正确:
a是一个特定于实例的私有变量(即clazz的不同实例将具有唯一且独立的变量'a').它可以从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() {...};
Run Code Online (Sandbox Code Playgroud)
创造单身人士.它是否正确?我也不确定在这种情况下"new"关键字的效果以及在声明结尾附加()函数括号如下:
var MySingleton = new function() {...}();
Run Code Online (Sandbox Code Playgroud)
我一直在使用这种模式声明一个类,然后实例化该类的实例:
function myClass() {...};
var classA = new myClass();
var classB = new myClass();
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?