中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

javaScript中的原型解析
來源:易賢網 閱讀:1050 次 日期:2016-07-02 14:08:09
溫馨提示:易賢網小編為您整理了“javaScript中的原型解析”,方便廣大網友查閱!

下面小編就為大家帶來一篇javaScript中的原型解析【推薦】。小編覺得挺不錯的,現在分享給大家,也給大家做個參考。

最近在學習javaScript,學習到js面向對象中的原型時,感悟頗多。若有不對的地方,希望可以指正。

js作為一門面向對象的語言,自然也擁有了繼承這一概念,但js中沒有類的概念,也就沒有了類似于java中的extends,所以,我覺得js中的繼承主要依賴于js中的原型(鏈)。

那么,原型是什么呢?我們知道js中函數亦是一種對象,當我們創建一個函數時,其實這個函數也就默認的擁有了一個屬性叫做prototype,這個屬型叫做原型屬性,他是一個指針,指向了這個函數的原型對象,這個原型對象有一個默認的屬性叫做constructor,這個屬型指向了擁有protptype屬型的函數。

function Person(){}

    Person.prototype={

     // constructor:Person;

      first_name:"guo",

      hair_color:"black",

      city:"zhengzhou",

      act:function(){alert("eatting");}

    };

以這個為例,我們先創建了一個函數Person,這個函數默認的有一個屬性prototype,指向Person.propttype這個對象,這個對象有一個默認的屬性constructor(),Person.prototype.constructor--->Person.(其實此處默認的是指向Object,后面會做指正)

當我們通過構造函數創建了實例后會怎么樣呢?

function Person(){} 

  Person.prototype={ 

    first_name:"guo", 

    hair_color:"black", 

    city:"zhengzhou", 

    act:function(){alert("eatting");} 

  }; 

  var boy=new Person(); 

  var girl=new Person(); 

在這時,我們要知道,js中的構造函數與函數的區別便是這個new關鍵字,使用new操作符的函數便是一個構造函數。當我們創建了Person的實例對象把它保存在boy,girl時,這兩個實例對象會生成一個默認的屬性叫做_proto_(在ECMAScript5中可用[[prototype]]表示),這個屬型指向了構造函數的原型對象,也就是boy._proto_--->Person.prototype(與構造函數毫無關系)。此時,boy或者girl可以通過點來調用原型對象中的屬型,此時要知道,boy,girl共享了原型對象的屬型。我們可以通過isProtptypeOf()或者object.getPrototypeOf()(這個函數的返回值為原型對象,也就是_proto_的值)來驗證上述結論。

alert(Person.prototype.isPrototypeOf(boy)); //true 

alert(Object.getPrototypeOf(boy).first_name);  //"guo" 

此時,我們可以再做進一步驗證,若在實例中創建了一個與原型對象屬性重名的屬性會怎么樣呢?

var boy=new Person(); 

var girl=new Person(); 

boy.hair_color="red";  

alert(boy.hair_color);  //red 

alert(girl.hair_color); //black 

alert(Object.getPrototypeOf(boy).hair_color);  //black 

由此可見,實例中聲明的重名屬性會屏蔽的原型對象中的屬性,但也僅僅時覆蓋,不會對原型對象的屬型造成影響(Object.getPrototypeOf(boy).hair_color==black),也不會對其他共享原型對象屬型的實例對象產生影響(girl.hair_color==black)。與此同時,可以使用delete操作符刪除實例對象聲明的屬性來撤銷掉屏蔽效果。我們可以使用hasOwnProperty()來驗證一個屬型是存在于實例的(true),還是存在于原型對象的(false)。

alert(boy.hasOwnProperty("hair_color")); //true

可以使用Object.keys()來枚舉屬性。

var key=Object.keys(Person.prototype); 

alert(key); 

學習了這些,我們會發現,使用上面的寫法來聲明原型對象會出現一個問題,constructor不再指向Person了,這與我們說的原型對象的constructor屬性默認指向含有prototype屬性的函數背道而馳,這是因為:每創建一個函數會自動創建一個prototype對象,這個對象會默認創建constructor。所以,此處我們的本質是對默認的prototype進行了重寫,因此新的consrtuctor也變成了指向Object函數,不再指向Person函數。若constructor真的很重要,那么需要寫上constructor:Person.

之后,我們需要知道原型的動態性,改變原型對象中的屬性會反應到實例中,不管實例的創建在原型對象的屬型改變前面或者后面

function Person(){} 

Person.prototype={ 

  first_name:"guo", 

  hair_color:"black", 

  city:"zhengzhou", 

  act:function(){alert("eatting");} 

}; 

var boy=new Person(); 

Person.prototype.hobby="basketball"; 

var girl=new Person(); 

alert(boy.hobby); //basketball 

上面這段代碼可見,即使對原型對象屬性的修改發生在實例創建的后面,boy實例亦然共享了Person.prototype.hobby.

但是,這種情況僅僅發生在原型對象屬型的修改,當對原型對象屬性進行完全重寫時,實例的創建必須放在原型對象屬性重寫的后面,否則會出錯。

function Person(){} 

    var girl=new Person(); 

    Person.prototype={ 

      first_name:"guo", 

      hair_color:"black", 

      city:"zhengzhou", 

      act:function(){alert("eatting");} 

    }; 

    var boy=new Person(); 

    Person.prototype.hobby="basketball"; 

    alert(boy.hobby);  //basketball 

    alert(girl.first_name);  //undefined 

再回到“屏蔽”這一問題上,我們前面了解到了創建實例對象的屬性(與原型對象中的某一屬性重名)會屏蔽掉原型對象的該屬性,但不影響其他實例對象。這里有一個錯誤,這個情況只適用于基本數據類型,當屬性的值引用類型時,會出現一個大問題,看如下代碼。

function Person(){}

    Person.prototype={

      first_name:"guo",

      hair_color:"black",

      friends:["Nick","John"],

      city:"zhengzhou",

      act:function(){alert("eatting");}

    };

    var boy=new Person();

    boy.friends.push("Mike");

    var girl=new Person();

    alert(boy.friends);  //Nick,John,Mike

    alert(girl.friends); //Nick,John,MIke

可見,上面這句話不適用了,原因是friends是存在于原型對象中的,而不是boy中,所以他的修改會影響到這個環境。(我們可以通過boy.frindes=[]來創建一個boy實例的屬性)那么,我們就需要引入組合使用構造函數模式與原型模式。

function Person(hair_color,city){ 

      this.hair_color=hair_color; 

      this.city=city; 

      this.friends=["John","Nick"]; 

    } 

    Person.prototype={ 

      constructor:Person, 

      first_name:"guo", 

      act:function() { 

        alert("eatting"); 

      } 

    }; 

    var boy=new Person("black","zhengzhou"); 

    var girl=new Person("red","shenyang"); 

    boy.friends.push("Nick"); 

    alert(girl.friends); 

    alert(boy.friends); 

該模式是目前ECMAScript中使用最廣泛,認同最高的創建自定義類型的方法,甚至可以作為一種默認模式。

但是對于從事其他面向對象語言的程序員來說,這樣的模式顯得很怪異,為了將所有的信息都封裝到構造函數中,動態原型模式出現了。動態模式主要是通過一個if語句來判斷是否需要對原型對象進行初始化,以達到節省資源的目的。

此外還有穩妥構造模式,是為了適應沒有共享屬性和不使用this的情況。

以上這篇javaScript中的原型解析【推薦】就是小編分享給大家的全部內容了,希望能給大家一個參考

更多信息請查看網絡編程
易賢網手機網站地址:javaScript中的原型解析
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
久久视频免费观看| 在线观看国产欧美| 亚洲男人的天堂在线观看| 伊人久久婷婷色综合98网| 欧美婷婷久久| 欧美日本一区二区三区 | 中日韩视频在线观看| 亚洲黄一区二区三区| 136国产福利精品导航网址应用| 国产性天天综合网| 国产亚洲视频在线| 黄色欧美成人| 亚洲黄色一区| 99精品视频网| 亚洲综合导航| 久久www成人_看片免费不卡| 久久精品1区| 久久综合给合| 欧美精品激情在线观看| 欧美日韩国产123区| 欧美午夜一区二区三区免费大片 | 午夜精品视频在线观看一区二区| 亚洲婷婷综合久久一本伊一区| 99re成人精品视频| 亚洲一区二区三区四区视频| 亚洲欧美精品在线| 久久久久88色偷偷免费| 欧美 日韩 国产在线| 欧美另类一区| 国产精品永久| 在线视频国产日韩| 9国产精品视频| 欧美夜福利tv在线| 你懂的一区二区| 欧美视频在线不卡| 国产一区在线看| 亚洲精品1区2区| 在线中文字幕一区| 久久精品人人爽| 欧美激情综合色| 国产乱码精品一区二区三区五月婷| 国产亚洲美州欧州综合国| 亚洲高清视频的网址| 亚洲一区二区在线| 久久激情网站| 欧美久久久久| 国产一区二区三区高清播放| 亚洲国产精品成人精品| 亚洲无玛一区| 久久免费偷拍视频| 欧美日韩亚洲高清| 黄色日韩网站视频| 亚洲女优在线| 欧美国产综合| 黄色日韩精品| 午夜亚洲性色视频| 欧美日韩国产一级| 激情综合网激情| 亚洲综合国产激情另类一区| 欧美成人黑人xx视频免费观看| 国产精品美女久久久久av超清| 亚洲第一在线视频| 久久国产加勒比精品无码| 欧美日韩久久精品| 亚洲国产精彩中文乱码av在线播放| 亚洲一区二区精品在线观看| 欧美成年人网站| 在线观看日韩专区| 久久国产一区二区三区| 国产精品户外野外| 亚洲精品日韩在线观看| 嫩草成人www欧美| 国内精品久久久久伊人av| 国产日本欧美一区二区三区| 日韩亚洲不卡在线| 欧美成人午夜激情视频| 今天的高清视频免费播放成人| 亚洲一级网站| 国产精品成人aaaaa网站| 亚洲免费观看高清完整版在线观看熊| 久久久久国产一区二区| 国产日本亚洲高清| 小辣椒精品导航| 国产精品久久久久av| 亚洲小说春色综合另类电影| 欧美日韩国产美| 99伊人成综合| 欧美日韩一区二区欧美激情 | 这里只有精品视频| 欧美电影专区| 亚洲福利专区| 欧美jizz19hd性欧美| 在线播放亚洲一区| 欧美a级在线| 亚洲国产一区二区三区a毛片| 久久精品综合| 亚洲国产二区| 欧美二区在线| 一区二区三区四区国产精品| 欧美午夜www高清视频| 亚洲一区二区成人| 国产网站欧美日韩免费精品在线观看 | 欧美在线一区二区| 国产日韩高清一区二区三区在线| 性色av一区二区三区在线观看| 国产精品久在线观看| 亚洲欧洲av一区二区| 国产亚洲一区在线播放| 久久久久久久久久久久久女国产乱| 伊人久久大香线| 蜜桃av久久久亚洲精品| 日韩亚洲在线| 国产精品一区二区三区四区| 欧美中日韩免费视频| 亚洲国产一区二区三区在线播 | 欧美成人一区二区三区在线观看 | 欧美日本一区| 亚洲香蕉伊综合在人在线视看| 国产深夜精品| 欧美大色视频| 亚洲欧美中文日韩在线| 一区二区在线观看视频| 欧美人体xx| 久久狠狠婷婷| 亚洲日韩中文字幕在线播放| 国产精品高潮粉嫩av| 久久噜噜亚洲综合| 99视频精品| 国产一区再线| 欧美日韩色综合| 久久精品国产久精国产思思| 最近中文字幕mv在线一区二区三区四区| 欧美日韩高清在线播放| 久久精品一本久久99精品| 一区二区免费看| 亚洲电影免费观看高清完整版在线 | 久久久亚洲精品一区二区三区 | 老色鬼久久亚洲一区二区 | 国产精品激情av在线播放| 久久久久五月天| 亚洲私人黄色宅男| 亚洲国产精品视频| 国产一区亚洲一区| 国产精品免费网站| 欧美国产日本在线| 久久九九全国免费精品观看| 亚洲一二三区在线| 日韩亚洲欧美综合| 亚洲国产国产亚洲一二三| 国产手机视频精品| 国产精品h在线观看| 欧美另类视频在线| 欧美 日韩 国产 一区| 久久国产精品免费一区| 亚洲综合首页| 亚洲视频狠狠| 一本久道久久久| 亚洲精品乱码久久久久| 韩日精品视频| 国产午夜精品理论片a级大结局 | 欧美中文字幕精品| 亚洲一区综合| 宅男噜噜噜66一区二区66| 亚洲剧情一区二区| 亚洲精品国产精品国产自| 亚洲国产成人av好男人在线观看| 黄色工厂这里只有精品| 国内精品久久久久影院 日本资源 国内精品久久久久伊人av | 欧美激情成人在线| 欧美成黄导航| 欧美14一18处毛片| 欧美电影免费观看| 欧美精品亚洲一区二区在线播放| 欧美xxxx在线观看| 欧美a级片网| 欧美久久一级| 国产精品国产自产拍高清av| 欧美手机在线视频| 国产精品久久久久久久7电影| 欧美视频在线观看免费网址| 欧美视频一区二区三区…| 国产精品福利影院| 国产精品欧美日韩| 国产亚洲精品一区二555| 国产综合av| 亚洲国产成人久久| 亚洲日本一区二区| 日韩午夜三级在线| 亚洲午夜激情| 欧美一区二区三区在线播放| 欧美在线看片a免费观看| 久久久美女艺术照精彩视频福利播放 | 亚洲砖区区免费| 亚洲欧洲99久久| 欧美在线国产| 可以免费看不卡的av网站| 欧美大片在线观看一区| 欧美午夜剧场| 狠狠爱www人成狠狠爱综合网| 亚洲激情女人|