我對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