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

JS繼承 筆記

 更新時間:2011年07月13日 23:41:56   作者:  
JavaScript中沒有類的概念,與類相關(guān)的繼承的概念更是無從談起,但是我們可以通過特殊的語法來模擬面向?qū)ο笳Z言中的繼承。
JS繼承
JavaScript中沒有類的概念,與類相關(guān)的繼承的概念更是無從談起,但是我們可以通過特殊的語法來

模擬面向?qū)ο笳Z言中的繼承。
在JS中模擬繼承有多種方式,其中寄生組合模式是一種比較容易簡單的模擬繼承模式,下面我們就來

介紹一下用寄生組合模式模擬繼承。
JS的繼承包括屬性的繼承和方法的繼承,他們分別通過不同的方法來實現(xiàn)。
1屬性的繼承
屬性的繼承通過改變函數(shù)的執(zhí)行環(huán)境來實現(xiàn)的。而改變函數(shù)的執(zhí)行環(huán)境可以使用call()和apply()兩種

方法來實現(xiàn)。
我們首先創(chuàng)建一個Animal“類”(因為JS中沒有類的概念,這里只是一個模擬,它實際上只是一個

Function函數(shù)對象)。
復(fù)制代碼 代碼如下:

   function Animal(name){
   this.name=name;
  }

再創(chuàng)建一個Lion“類”,“繼承”于Animal
復(fù)制代碼 代碼如下:

  function Lion(){
   Animal.apply(this, ["獅子"]);
   }

這里使用了Animal的apply方法,把Animal的執(zhí)行環(huán)境改成Lion被調(diào)用時的執(zhí)行環(huán)境。
這里要解釋一下,我們要想使用Lion這個“類”,通常需要new一個Lion。如:
       var l = new Lion();
而new關(guān)鍵字是十分偉大的,在上段代碼中,new關(guān)鍵字完成了以下幾項工作:
   1)開辟堆空間,以準(zhǔn)備存儲Lion對象
  2)修改Lion對象本身的執(zhí)行環(huán)境,使得Lion函數(shù)的this指向了Lion函數(shù)對象本身。
  3)調(diào)用Lion“類”的“構(gòu)造函數(shù)”,創(chuàng)建Lion對象
  4)將Lion函數(shù)對象的堆地址賦值給變量l,這個時候l就指向了這個Lion函數(shù)對象
所以經(jīng)過new關(guān)鍵字以后Animal.apply(this, ["獅子"])中的this已經(jīng)指向了Lion函數(shù)對象本身了,所

以這段代碼就將Animal函數(shù)的執(zhí)行環(huán)境改變成了Lion函數(shù)中,相當(dāng)于以下代碼:
復(fù)制代碼 代碼如下:

  function Lion(){
  function Animal(name){
  this.name=name;
   }
  }

而此時的this已經(jīng)是Lion函數(shù)對象了所以上段代碼進(jìn)一步相當(dāng)于:
復(fù)制代碼 代碼如下:

  function Lion(){
   this.name=name;
  }

這樣就給Lion函數(shù)對象添加了name屬性,也模擬了Lion函數(shù)繼承于Animal函數(shù)的效果。
2方法的繼承
在JS中每一個“類”(即函數(shù),注意不是函數(shù)對象)都有一個prototype屬性,prototype表示該函數(shù)

的原型,也表示一個類的成員的集合(通常是方法的集合)。我們可以通過函數(shù)的prototype屬性來實現(xiàn)方

法的繼承。
我們同樣首先創(chuàng)建一個Animal“類”:
復(fù)制代碼 代碼如下:

   function Animal(name){
  this.name=name;
  }

給Animal的原型中加入一個eat方法:
復(fù)制代碼 代碼如下:

  Animal.prototype.eat=function(){
   alter("我能吃!~");
  }

創(chuàng)建一個Lion“類”,同時完成對Animal“類”的屬性的繼承
復(fù)制代碼 代碼如下:

   function Lion(){
Animal.apply(this, ["獅子"]);
  }

注意下面的代碼,我們馬上要完成方法的繼承了
Lion.prototype=new Animal();
這樣就把一個Animal函數(shù)對象儲存在了Lion的原型中了,Lion也就包含了Animal中的方法了(其實也

包含了屬性)。這樣就模擬了Lion函數(shù)對Animal的繼承。
  • JavaScript的面向?qū)ο蠓椒ㄒ约安顒e

    JavaScript的面向?qū)ο蠓椒ㄒ约安顒e

    JS作為一種動態(tài)語言,在語法上有相當(dāng)大的自由度,所以造成了一種功能,有N種寫法的局面。 在JS中實現(xiàn)OOP,一般來說有兩種方法:
    2008-03-03
  • 從面試題學(xué)習(xí)Javascript 面向?qū)ο螅▌?chuàng)建對象)

    從面試題學(xué)習(xí)Javascript 面向?qū)ο螅▌?chuàng)建對象)

    從面試題學(xué)習(xí)Javascript 面向?qū)ο螅▌?chuàng)建對象),學(xué)習(xí)js的朋友可以參考下
    2012-03-03
  • JavaScript中的面向?qū)ο蠼榻B

    JavaScript中的面向?qū)ο蠼榻B

    在JavaScript,可以說everything is object,那么什么是對象?對象就是包含一組變量和函數(shù)的集合。在其它面向?qū)ο笳Z言中對象是由類的實例化而來,JavaScript是基于原型的面向?qū)ο笳Z言,沒有類的概念,對象派生自現(xiàn)有對象的副本
    2012-06-06
  • javascript 面向?qū)ο笕吕砭氈當(dāng)?shù)據(jù)的封裝

    javascript 面向?qū)ο笕吕砭氈當(dāng)?shù)據(jù)的封裝

    JavaScript 是一種非常靈活的面向?qū)ο蟪绦蛟O(shè)計語言,它與傳統(tǒng)的強(qiáng)類型的面向?qū)ο蟪绦蛟O(shè)計語言(如 C++,Java,C# 等)有很大不同,所以要實現(xiàn)如 C++、java、C# 當(dāng)中的一些特性就需要換一種思考方式來解決。
    2009-12-12
  • JavaScript 面向?qū)ο缶幊蹋?) 基礎(chǔ)

    JavaScript 面向?qū)ο缶幊蹋?) 基礎(chǔ)

    自從有了Ajax這個概念,JavaScript作為Ajax的利器,其作用一路飆升。JavaScript最基本的使用,以及語法、瀏覽器對象等等東東在這里就不累贅了。把主要篇幅放在如何實現(xiàn)JavaScript的面向?qū)ο缶幊谭矫妗?/div> 2010-05-05
  • javascript Base類 包含基本的方法

    javascript Base類 包含基本的方法

    一個Base類,包含基本的方法,大家可以在這個基礎(chǔ)上拓展下功能。
    2009-07-07
  • 關(guān)于js類的定義

    關(guān)于js類的定義

    這兩天幫同學(xué)做秒殺網(wǎng),打算將前臺和后臺徹底分離,僅用ajax通信。這樣就免不了大量的使用javascript,于是發(fā)現(xiàn),js果然是難學(xué)難用。
    2011-06-06
  • javascript new后的constructor屬性

    javascript new后的constructor屬性

    new后的constructor屬性使用說明,需要的朋友可以參考下。
    2010-08-08
  • javscript對象原型的一些看法

    javscript對象原型的一些看法

    javscript對象原型的小技巧。學(xué)習(xí)js面向?qū)ο蟮呐笥芽梢詤⒖枷隆?/div> 2010-09-09
  • 最新評論

    平原县| 余庆县| 崇阳县| 阳原县| 恩平市| 祁东县| 交口县| 玉门市| 绩溪县| 鄱阳县| 南安市| 边坝县| 阿坝县| 阜南县| 师宗县| 额济纳旗| 马龙县| 隆昌县| 黔西县| 漠河县| 龙岩市| 比如县| 泰兴市| 庐江县| 东乌珠穆沁旗| 彩票| 巴彦县| 朝阳区| 山阴县| 防城港市| 尉犁县| 仁化县| 邳州市| 荥经县| 牡丹江市| 安化县| 宽甸| 砚山县| 景德镇市| 云阳县| 贡嘎县|