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

JS模擬面向?qū)ο笕猓ㄒ?、類型及傳遞)

 更新時間:2011年07月13日 00:08:24   作者:  
首先說明JS的特點(diǎn)。JS是弱類型的語言,像什么模板多態(tài)、又是類又是結(jié)構(gòu)的說法,就完全不存在。
可是,沒有類,何來面向?qū)ο笠徽f?沒有關(guān)系,可以模擬。而且這一套方法已經(jīng)成為公認(rèn)的JS實現(xiàn)面向?qū)ο蟮姆椒ā?
另外,JS內(nèi)的東西完全開發(fā),也就不存在成員的什么private、protected作用域。
下面切入正題。

一、類型    //從基礎(chǔ)開始,省的后面看著吃力

1、類型的區(qū)別
基本數(shù)據(jù)類型和對象類型不是一回事。
a、基本類型只是一個值,沒有任何行為;而對象類型有自己的行為。
b、基本類型是值類型,僅表示一個值;對象類型則擁有許多復(fù)雜的東西。
c、基本類型傳遞時傳值,對象類型傳遞時傳址。
另外,文本非常特殊,JS里面有兩種文本類型——一種基本數(shù)據(jù)類型,一種對象類型。 舉個例子:
var str="The End";//這樣是基本數(shù)據(jù)類型,傳遞方式就是傳值
var str2=new string("The End");//這就不同,有了new這個為對象開辟內(nèi)存空間的標(biāo)識符,對應(yīng)的變量就會成為對象類型,傳遞時即傳址
簡單點(diǎn)說: a、直接用字面量賦值的變量,如var a=1;var b="a";var c=true;,都是基本數(shù)據(jù)類型(常用的有:數(shù)值、文本、布爾)
b、用new賦值的變量,如var a=new Object();var b=new string();,都是對象類型(JS有許多對象,算是精簡的面向?qū)ο笳Z言) 請注意:基本數(shù)據(jù)類型也可以new,但是很少有那種用法。因此上述區(qū)分辦法不完全適用所有情況,請加以自行判斷。

2、參數(shù)傳遞方式 這一節(jié)主要來區(qū)分傳址、傳值。 仍然拿例子來說事:
復(fù)制代碼 代碼如下:

function changeVar(varible){
    varible=5;
    alert(varible);//提示5
}
var a=3;
alert(a);//提示3
changeVar(a);//該函數(shù)內(nèi)部有改變參數(shù)的代碼 alert(a);//仍然提示3

根據(jù)上例可以發(fā)現(xiàn),函數(shù)雖然改變了參數(shù),但是并沒有改變參數(shù)所代表的傳遞過去變量。這是傳值。在調(diào)用changeVar時,JS重新拷貝了一份你傳遞的變量作為參數(shù),所以,在changeVar內(nèi)部操作的參數(shù)實際上是你傳遞的變量的副本,而非本身。 傳遞的其實是變量的值,而非變量本身。這叫做傳值。
復(fù)制代碼 代碼如下:

function changeVar(varible){
    varible.x=5;
    alert(varible.x);//提示5
}
var a=new Object;
a.x=3 alert(a.x);//提示3
changeVar(a);//該函數(shù)內(nèi)部有改變參數(shù)的代碼
alert(a.x);//提示5

上例改成使用Object對象了。發(fā)現(xiàn),changeVar之后,原來的變量的對應(yīng)屬性也發(fā)生改變,函數(shù)內(nèi)部就是操作的傳遞的變量本身。 傳址就是這個道理,把你給定的變量的內(nèi)存地址傳遞過去,函數(shù)內(nèi)部改變的其實就是你傳遞的變量。因為操作的都是在統(tǒng)一內(nèi)存地址的東西。

但是,一定注意這個“但是”!JS的傳址還是有些特別之處! JS在傳遞對象類型時,大概也拷貝了一份相應(yīng)類型的對象,但是副本對象的所有屬性、函數(shù)都是原對象的屬性、函數(shù)。 也許就是,屬性傳址而對象不傳址。 這個特點(diǎn)可以證明。 代碼如下:
復(fù)制代碼 代碼如下:

function changeVar(varible){
    varible=new Object();
    varible.x=5;
    alert(varible.x);//提示5
}
var a=new Object;
a.x=3 alert(a.x);//提示3
changeVar(a);//該函數(shù)內(nèi)部有改變參數(shù)的代碼
alert(a.x);//提示3

當(dāng)你改變了參數(shù)代表的對象時,并未改變的了你傳遞的變量代表的對象。但前面說過,可以通過函數(shù)內(nèi)對參數(shù)對象的屬性操作改變原變量代表對象的屬性。這結(jié)合起來就可以證明,JS在傳遞對象類型時,也拷貝了一份相應(yīng)類型的對象,但是副本對象的所有屬性、函數(shù)都是原對象的屬性、函數(shù)。

相關(guān)文章

  • javascript作用域、作用域鏈(菜鳥必看)

    javascript作用域、作用域鏈(菜鳥必看)

    下面小編就為大家?guī)硪黄猨avascript作用域、作用域鏈(菜鳥必看)。小編覺得 挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • js禁止頁面刷新與后退的方法

    js禁止頁面刷新與后退的方法

    這篇文章主要介紹了js禁止頁面刷新與后退的方法,實例分析了javascript屏蔽F5鍵、右鍵菜單、F1鍵等實現(xiàn)技巧,需要的朋友可以參考下
    2015-06-06
  • Echarts地圖添加引導(dǎo)線效果(labelLine)

    Echarts地圖添加引導(dǎo)線效果(labelLine)

    這篇文章主要介紹了Echarts地圖添加引導(dǎo)線效果(labelLine),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • javascript parseInt() 函數(shù)的進(jìn)制轉(zhuǎn)換注意細(xì)節(jié)

    javascript parseInt() 函數(shù)的進(jìn)制轉(zhuǎn)換注意細(xì)節(jié)

    parseInt(string, radix) 有2個參數(shù),第一個string 是傳入的數(shù)值,第二個radix是 傳入數(shù)值的進(jìn)制,參數(shù)radix 可以忽略,默認(rèn)為 10,各種進(jìn)制的數(shù)轉(zhuǎn)換為 十進(jìn)制整數(shù),接下來詳細(xì)介紹,感興趣的朋友可以了解下哦
    2013-01-01
  • javascript實現(xiàn)控制文字大中小顯示

    javascript實現(xiàn)控制文字大中小顯示

    網(wǎng)頁上可以自由改變字體大小是個非常有助于用戶體驗的小功能,現(xiàn)在許多網(wǎng)站上都有此功能,今天我們來簡單實現(xiàn)下。
    2015-04-04
  • JavaScript將相對地址轉(zhuǎn)換為絕對地址示例代碼

    JavaScript將相對地址轉(zhuǎn)換為絕對地址示例代碼

    本文為大家詳細(xì)介紹下JavaScript怎么將相對地址轉(zhuǎn)換為絕對地址,具體的示例如下,感興趣的朋友可以參考下哈,希望對大家有所幫助
    2013-07-07
  • 微信小程序如何處理token過期問題

    微信小程序如何處理token過期問題

    最近再做個項目,需要檢查token過期,跳轉(zhuǎn)到登錄頁面,要求用戶重新登錄,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 前端開發(fā)必須知道的JS之閉包及應(yīng)用

    前端開發(fā)必須知道的JS之閉包及應(yīng)用

    本文講的是函數(shù)閉包,不涉及對象閉包(如用with實現(xiàn))。如果你覺得我說的有偏差,歡迎拍磚,歡迎指教。
    2010-07-07
  • javascript避免數(shù)字計算精度誤差的方法詳解

    javascript避免數(shù)字計算精度誤差的方法詳解

    本篇文章主要是對javascript避免數(shù)字計算精度誤差的方法進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-03-03
  • [JSF]使用DataModel處理表行事件的實例代碼

    [JSF]使用DataModel處理表行事件的實例代碼

    在使用JSF中,最常用的恐怕就要屬于表格的處理了。使用DataModel可以方便地進(jìn)行對表行的處理:
    2013-08-08

最新評論

富阳市| 西畴县| 威远县| 图木舒克市| 彰化市| 纳雍县| 额尔古纳市| 竹山县| 沛县| 西昌市| 和政县| 宁南县| 老河口市| 太康县| 伊吾县| 钟山县| 阿鲁科尔沁旗| 红原县| 正宁县| 庐江县| 遵化市| 平舆县| 集贤县| 甘洛县| 台湾省| 台州市| 建平县| 桐城市| 铜陵市| 津南区| 涞水县| 长阳| 武宁县| 佳木斯市| 富平县| 永德县| 盘山县| 化州市| 沾益县| 蓝田县| 泰来县|