午夜国产狂喷潮在线观看|国产AⅤ精品一区二区久久|中文字幕AV中文字幕|国产看片高清在线

    如何學(xué)好JavaScript(五) —— 類和對象
    來源:易賢網(wǎng) 閱讀:708 次 日期:2015-04-22 11:36:59
    溫馨提示:易賢網(wǎng)小編為您整理了“如何學(xué)好JavaScript(五) —— 類和對象”,方便廣大網(wǎng)友查閱!

    首先,不得不說,我無法達到拋開類和對象的概念來看Javascript的境界,對于Javascript是否是面向?qū)ο蟮恼f法有很多,不過我最認同的還是Javascript是一種“基于prototype的面向?qū)ο笳Z言”。

    面向?qū)ο笳Z言三大特點:繼承,多態(tài),封裝,這三點雖然Javascript沒有提供天然的語法實現(xiàn),但是我們都可以通過prototype等技巧來實現(xiàn),因此這種說法似乎不過分。

    在Javascript中,構(gòu)造對象有三種方式:

    1. 首先,我們要明確一個概念,Javascript是一種弱類型的語言,一方面體現(xiàn)在Javascript的變量,返回類型都是沒有強類型約束的,另一方面,Javascript可以為對象任意添加屬性和方法。根據(jù)這個,我們可以寫出這樣的代碼:

    <script type="text/javascript">

    var person = {};

    person.name = "飛林沙";

    person.age = 21;

    person.Introduce = function () {

    alert("My name is " + this.name + ".I'm " + this.age);

    };

    person.Introduce();

    script>

    這里的person就是我們構(gòu)造出的一個對象。

    2. 我們也可以利用JSON的形式來構(gòu)造一個對象。

    <script type="text/javascript">

    var person = {

    name: "飛林沙",

    age: 21,

    Introduce: function () { alert("My name is " + this.name + ".I'm " + this.age); }

    };

    person.Introduce();

    script>

    這個是不是很像我們在C#3.0里提出的匿名對象呢?

    protected void Page_Load(object sender, EventArgs e)

    {

    var person = new

    {

    name = "飛林沙",

    age = 21

    };

    Response.Write("My name is " + person.name + ".I'm " + person.age);

    }

    不同的是在Javascript中,函數(shù)是一種類型,所以可以賦給某個變量,但是C#不可以。

    但是上面兩種方法我們看到,我們都是單獨定義了一個對象。接下來讓我們把他們抽象出來成為一個類。

    <script type="text/javascript">

    var Person = function () {

    this.name = "飛林沙";

    this.age = 21;

    this.Introduce = function () {

    alert("My name is " + this.name + ".I'm " + this.age);

    };

    };

    var person = new Person();

    person.Introduce();

    script>

    可是在這里,我們看到,屬性都已經(jīng)被寫死了,我們根本沒辦法為每個對象單獨訂制,解決辦法很簡單:

    <script type="text/javascript">

    var Person = function (name, age) {

    this.name = name;

    this.age = age;

    this.Introduce = function () {

    alert("My name is " + this.name + ".I'm " + this.age);

    };

    };

    var person = new Person("飛林沙", 21);

    person.Introduce();

    script>

    好,我們來對比一下第二種和第三種寫法,兩者是等效的。在第二種寫法中,實際上是構(gòu)建了一個JSON對象,而我們又知道JSON本質(zhì)上其實就是一個鍵值對,那么我們是否也可以用同樣的方式來理解一個對象呢?

    我們來寫出這樣的測試代碼試試:

    <script type="text/javascript">

    var Person = function (name, age) {

    this.name = name;

    this.age = age;

    this.Introduce = function () {

    alert("My name is " + name + ".I'm " + age);

    };

    };

    var person = new Person("飛林沙", 21);

    for (var p in person) {

    alert(p);

    }

    alert(person["name"]);

    script>

    這樣的代碼沒偶任何問題,首先用遍歷的方式來找到person所有的key(屬性和方法名)。然后我們用索引的方式來訪問person對象的name屬性。

    這些都沒有問題,可是我們是不是看到了一個引申的問題,從傳統(tǒng)面向?qū)ο蟮恼Z言來看,name和age應(yīng)該屬于私有變量,那么這樣用person簡簡單單的訪問,是不是破壞了封裝性呢?

    還記得我們在前文中說過的么?var的叫變量,沒有var的叫屬性。那么我們?nèi)绻v代碼改成這個樣子。

    <script type="text/javascript">

    var Person = function (name, age) {

    var name = name;

    var age = age;

    this.GetName = function () {

    return name;

    }

    this.GetAge = function () {

    return age;

    }

    this.Introduce = function () {

    alert("My name is " + name + ".I'm " + age);

    };

    };

    var person = new Person("飛é林?沙3", 21);

    alert(person["name"]);

    alert(person.GetName());

    script>

    這樣就可以封裝得很好了,這也是在Javascript中的封裝方式。

    好,關(guān)于Javascript的類和對象就說到這,但是這里面仍然有一些問題。我們會在下文中提及。

    更多信息請查看IT技術(shù)專欄

    更多信息請查看腳本欄目
    易賢網(wǎng)手機網(wǎng)站地址:如何學(xué)好JavaScript(五) —— 類和對象
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

    2025國考·省考課程試聽報名

    • 報班類型
    • 姓名
    • 手機號
    • 驗證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
    云南網(wǎng)警備案專用圖標(biāo)
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
    云南網(wǎng)警報警專用圖標(biāo)