[ASP.NET Ajax] ECMAScript基礎類以及Asp.net Ajax對類lt;Objectgt;的擴充

來源:互聯網
上載者:User

“Everything is Object”,在物件導向的程式設計語言中誰都知道這句話,但對我來說這是一種感覺,只可意會很難言傳。由於我對JavaScript和薄弱,所以在看Asp.net Ajax類庫的同時也翻出了ECMAScript順便學習學習。在.NET中所有類都是繼承自Object,同樣在JS中也一樣說有都繼承Object,因此如果對Object進行了擴充,那所有繼承Object類的後代肯定會擁有祖先的血緣。

既然開始學習JavaScript那就順便在這裡提一提他的未經處理資料類型,在JS中有5個未經處理資料類型(Undefined、Null、Boolean、Number、String),可以通過typeof來判斷變數和值的資料類型

1. Undefined: 當變數被聲明但沒有被初始化,或函數沒有明確返回一個值的時候,該變數或函數即為 Undefined 類型,是Null類型的一種特性。

2. Null: 當一個對象的值不存在時,該對象返回null。

3. Boolean:一看就知道,一男一女true/false,值得注意的是0不等於false,但是可以轉化為false。

4. Number:可以定義32位整型資料或64位浮點型資料。從網上的一些資料知道,浮點數在未被計算之前是以String類型儲存(不知道是真是假)。當浮點類型資料很大或很小時(可以前後移動六位),將使用E標記法來表示浮點數據,最大可以儲存17位元據。另外,isFinite()方法可以判斷一個數值是否有限,isNaN()方法可以判斷一個資料是非數字類型。通過parseInt()和parseFloat()可以將其他類型轉化為數字類型,如果轉化不成功則返回NaN(Not a Number)。

5. String:這是一個唯一沒有大小限制的原始類型,其他類型可以通過toString()轉化為String類型,值得一提的是數字轉化為String類型可以加入2.8.16作為參數已輸出二進位,八進位和十六進位的字串。

下面我們來看一下Object類型,通過var obj=new Object();可以申明一個對象。同.NET中的Object一樣,它是所有類的基類。

它具有兩個屬性:constructor(相當於.NET中的建構函式)建議一個對象函數引用,對於Object類而言,該引用指向本地Object()方法。Prototype對象裡prototype對象的一個引用值,通過這個屬性可以反射每個對象中的prototype擴充的屬性和方法,在Asp.net Ajax中也是利用這個屬性類擴充和反射類的。

hasOwnProperty(property)—判斷property屬性是否存在於對象中,property資料類型為string;isPrototypeOf(object)— 判斷一個對象是否是另一對象的 prototype;propertyIsEnumerable(property)— 判斷所給出的屬效能否使用 for 語句列舉出來;toString()—返回對象的原始類型string;valueOf()—返回對象合適的原始值,對於多數類而言,返回的值和toString()相同。這些就是原始Object對象的方法,在其他類中這些方法以同樣被繼承。

在Asp.NET Ajax中微軟為了將整個類庫擴充的更適合.NET的開發人員,在原始的Object對象中擴充了兩個方法:

Object.__typeName="Object";

Object.getType=function(b){

var a=b.constructor;

if(!a||typeof a!=="function"||!a.__typeName||a.__typeName==="Object")return Object;

return a

};

Object.getTypeName=function(a){

return Object.getType(a).getName()

};

從上面我們可以看到,Object.getType(type)這個靜態方法可以擷取一個類的對象,而Object.getTypeName(type)通過調用[prototype]Type.getName()而擷取類的名(包括命名空間)。這沒有什麼好說的,下面來看一下測試:

<asp:ScriptManager ID="ScriptManager1" runat="server" />

<div>

<script language="javascript">

Type.registerNamespace("NExplus");

//define a class;

NExplus.ObjectTest=function(name){

this._name=name;

}

NExplus.ObjectTest.prototype.getName=function(){

return (this._name === undefined) ? null : this._name;

}

NExplus.ObjectTest.prototype.setName=function(name){

this._name=name;

}

//register class;

NExplus.ObjectTest.registerClass("NExplus.ObjectTest");

NExplus.TestObject=function(){

var a=new NExplus.ObjectTest("Test is success?");

document.write(a.getName());

document.write("<br/>");

a.setName("Success!");

document.write(a.getName());

document.write("<br/>");

document.write(Object.getTypeName(a)+"<br/>")

}

//run;

NExplus.TestObject();

</script>

</div>

運行結果:

Test is success?
Success!
NExplus.ObjectTest

這個比較簡單,微軟只是為了和.NET架構更接近而擴充的Object類,我覺得這兩個在開發過程中應該很少用到吧,上面的測試順便測試一下屬性J。我很想知道有沒有那個好心人翻譯了ECMAScript的規範文檔,看英文真的好類;<.順便附上一隻捆牢我的兩個操作符: ||:從第一個開始,遇到有意義的返回,否則返回最後一個運算式(不一定是Boolean值); &&:從第一個開始,遇到無意義(0,null,undefined,"",false,NaN)的返回,否則返回最後一個運算式(不一定是Boolean值)。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.