最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Javascript學(xué)習(xí)筆記5 類和對象

 更新時間:2010年01月11日 00:31:20   作者:  
首先,不得不說,我無法達到拋開類和對象的概念來看Javascript的境界,對于Javascript是否是面向?qū)ο蟮恼f法有很多,不過我最認(rèn)同的還是Javascript是一種“基于prototype的面向?qū)ο笳Z言”。
面向?qū)ο笳Z言三大特點:繼承,多態(tài),封裝,這三點雖然Javascript沒有提供天然的語法實現(xiàn),但是我們都可以通過prototype等技巧來實現(xiàn),因此這種說法似乎不過分。
在Javascript中,構(gòu)造對象有三種方式:
1. 首先,我們要明確一個概念,Javascript是一種弱類型的語言,一方面體現(xiàn)在Javascript的變量,返回類型都是沒有強類型約束的,另一方面,Javascript可以為對象任意添加屬性和方法。根據(jù)這個,我們可以寫出這樣的代碼:
復(fù)制代碼 代碼如下:

<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)造一個對象。
復(fù)制代碼 代碼如下:

<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里提出的匿名對象呢?
復(fù)制代碼 代碼如下:

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#不可以。
但是上面兩種方法我們看到,我們都是單獨定義了一個對象。接下來讓我們把他們抽象出來成為一個類。
復(fù)制代碼 代碼如下:

<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)被寫死了,我們根本沒辦法為每個對象單獨訂制,解決辦法很簡單:
復(fù)制代碼 代碼如下:

<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ì)上其實就是一個鍵值對,那么我們是否也可以用同樣的方式來理解一個對象呢?
我們來寫出這樣的測試代碼試試:
復(fù)制代碼 代碼如下:

<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代碼改成這個樣子。
復(fù)制代碼 代碼如下:

<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的類和對象就說到這,但是這里面仍然有一些問題。我們會在下文中提及。

相關(guān)文章

  • Mobile Web開發(fā)基礎(chǔ)之四--處理手機設(shè)備的橫豎屏問題

    Mobile Web開發(fā)基礎(chǔ)之四--處理手機設(shè)備的橫豎屏問題

    這篇文章主要介紹了Mobile Web開發(fā)基礎(chǔ)之-—處理手機設(shè)備的橫豎屏,window.orientation屬性與onorientationchange事件以及media query方式是開發(fā)過程中需要注意到的兩種解決方式,需要的朋友可以參考下
    2017-08-08
  • 轉(zhuǎn)義字符(\)對JavaScript中JSON.parse的影響概述

    轉(zhuǎn)義字符(\)對JavaScript中JSON.parse的影響概述

    JSON是一個提供了stringify和parse方法的內(nèi)置對象,前者用于將js對象轉(zhuǎn)化為符合json標(biāo)準(zhǔn)的字符串,后者將符合json標(biāo)準(zhǔn)的字符串轉(zhuǎn)化為js對象,本文為大家介紹下轉(zhuǎn)義字符對JSON.parse方法的影響
    2013-07-07
  • JavaScript 事件綁定及深入

    JavaScript 事件綁定及深入

    這篇文章主要介紹了JavaScript 事件綁定及深入,需要的朋友可以參考下
    2015-04-04
  • JavaScript基礎(chǔ)心法 深淺拷貝(淺拷貝和深拷貝)

    JavaScript基礎(chǔ)心法 深淺拷貝(淺拷貝和深拷貝)

    淺拷貝和深拷貝都是對于JS中的引用類型而言的,淺拷貝就只是復(fù)制對象的引用,如果拷貝后的對象發(fā)生變化,原對象也會發(fā)生變化。只有深拷貝才是真正地對對象的拷貝
    2018-03-03
  • JavaScript中的Repaint和Reflow用法詳解

    JavaScript中的Repaint和Reflow用法詳解

    這篇文章主要介紹了JavaScript中的Repaint和Reflow用法詳解,是JS入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-07-07
  • 微信小程序訪問node.js接口服務(wù)器搭建教程

    微信小程序訪問node.js接口服務(wù)器搭建教程

    這篇文章主要給大家分享了微信小程序訪問node.js接口服務(wù)器的搭建教程,文中介紹的非常詳細(xì),對大家具有一定的參考價值,需要的朋友們下面來跟著小編一起看看吧。
    2017-04-04
  • JavaScript中的跨瀏覽器事件操作的基本方法整理

    JavaScript中的跨瀏覽器事件操作的基本方法整理

    首先值得說一下,在事件處理、事件對象、阻止事件的傳播等方法或?qū)ο蟠嬖谥鵀g覽器兼容性問題,開發(fā)過程中最好編寫成一個通用的事件處理工具,嗯,接下來我們一起來看一下JavaScript中的跨瀏覽器事件操作的基本方法整理
    2016-05-05
  • 在javascript中對于DOM的加強

    在javascript中對于DOM的加強

    本篇文章,小編為大家介紹關(guān)于在javascript中對于DOM的加強,有需要的朋友可以參考一下
    2013-04-04
  • JavaScript實現(xiàn)cookie的操作

    JavaScript實現(xiàn)cookie的操作

    這篇文章介紹了JavaScript操作Cookie的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • 在JavaScript中處理字符串之link()方法的使用

    在JavaScript中處理字符串之link()方法的使用

    這篇文章主要介紹了在JavaScript中處理字符串之link()方法的使用,是JS入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-06-06

最新評論

石城县| 广宗县| 蓝田县| 垫江县| 固原市| 宝鸡市| 石楼县| 民权县| 哈密市| 海门市| 太原市| 城固县| 镇雄县| 枝江市| 河津市| 洛浦县| 迁安市| 南丹县| 侯马市| 广汉市| 大连市| 大庆市| 丰顺县| 佛冈县| 甘肃省| 青神县| 读书| 开原市| 玉环县| 兴山县| 寿宁县| 广南县| 和硕县| SHOW| 东阳市| 杭锦旗| 吉安县| 肇源县| 深水埗区| 抚顺县| 龙井市|