【发布时间】:2010-12-21 20:02:24
【问题描述】:
我对 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);
我在以下评估中是否正确:
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() {...};
创建单例。它是否正确?我也不确定在这种情况下“new”关键字的效果以及将 () 函数大括号附加到声明的末尾,如下所示:
var MySingleton = new function() {...}();
我一直在使用这种模式来声明一个类,然后实例化该类的实例:
function myClass() {...};
var classA = new myClass();
var classB = new myClass();
这是正确的方法吗?
【问题讨论】:
标签: javascript variables class