一:Class and private And public
JS 中的類以 function 進行聲明,同時 JS 也支援聲明私有 private 和公有 public 成員,隻不過跟 C# 不一樣,它們不是使用這兩個關鍵字實作的。具體如何實作,直接看代碼:
function SampleClass(arg1) {
/* 聲明了一個私有方法 */
function priMethod1() {
alert("private method 1");
}
/* 聲明了一個私有變量,并指派 */
var x1 = 3;
var x2 = arg1;
/* 聲明了一個私有變量,并立刻執行 priMethod1,将傳回值指派給該變量 */
var y = priMethod1();
/* 聲明了一個私有變量,并定義了一個方法,并将該方法的引用指派給該變量
備注:是以,不會執行,到 z(); 時候才會執行;
*/
var z = function() {
alert("private method 2");
};
/* 聲明了一個共有變量,并定義了一個方法,并将該方法的引用指派給該變量
this.PubMethod1 = function () {
alert("public method 1");
/* 以下為 公共成員 ,注解同上*/
this.A = 2;
this.B = this.PubMethod1();
this.C = function() {
alert("public method 2");
};
}
上面的代碼中我們可以了解 SampleClass 同時也聲明了一個帶一個參數的構造器,構造器參數本身左右 SampleClass 的一個私有變量存在;
二:new SampleClass(2) 發生了什麼事情?
如果用 OO 的思想來了解,
var testClass = new SampleClass(2);
首先成了一個對象,并執行構造方法。在上面的代碼中,注釋中,已經注明了哪些是聲明,哪些是在聲明的同時執行了方法。
也就是說,如果 new SampleClass(2),從 UI 的角度來說,我們會看到彈出兩條消息:
"private method 1" 和 "public method 1"。
在 testClass 上,我們也體會到 私有成員 和 公有成員 的差別,如果我們在 Visual Studio 中編碼,通過 testClass 隻能智能感覺到公有成員。
三:JS 中屬性?
JS 中沒有屬性這一說,以
舉例,我們調用在:
testClass.B;
的時候,實際上根本不會去執行 PubMethod1 這個方法,PubMethod1 這個方法實際上是在構造器中已經被執行過了。是以,我們要通過 testClass 去執行代碼,隻能通過為 SampleClass 定義方法的方式來完成。
四:this 關鍵字以及如何在類内部擷取到目前對象
在 SampleClass 中,我們通過 this 關鍵字來創造公有成員,即意味着,通過 this 在類型内部擷取到了目前對象。那麼,是否在 SampleClass 内部使用 this 擷取到的永遠是目前對象内?顯然不是的。假設在 SampleClass 内部,有如下一段代碼:
this.SomeData = [];
this.TestMethod1 = function() {
$.ajax({
type: "GET",
success: function(data) {
this.SomeData = data;
}
});
};
實際上,在 success 回調方法内部,對于 this.SomeData 的指派是不會成功的。如果我們通過調試器,檢視此處的 this,它代表是回調方法的引用所代表的那個對象本身,如下:
那麼,我們就是要在方法内部得到目前對象怎麼辦,方法是在 SampleClass 内部聲明一個私有成員,然後:
var parentThis = this;
然後,在你需要用到目前對象的時候,使用 parentThis 就可以了。
本文轉自最課程陸敏技部落格園部落格,原文連結:http://www.cnblogs.com/luminji/p/3342172.html,如需轉載請自行聯系原作者