亚洲一级免费看,特黄特色大片免费观看播放器,777毛片,久久久久国产一区二区三区四区,欧美三级一区二区,国产精品一区二区久久久久,人人澡人人草

JavaScript

JavaScript中繼承的深入理解

時間:2024-09-02 02:46:07 JavaScript 我要投稿
  • 相關推薦

關于JavaScript中繼承的深入理解

  JavaScript中我們可以借助原型實現(xiàn)繼承。

  例如

  function baz(){this.oo="";}function foo(){}foo.prototype=new baz();var myFoo=new foo();myFoo.oo;

  這樣我們就可以訪問到baz里的屬性oo啦。在實際使用中這個樣不行滴,由于原型的共享特點(數(shù)據(jù)保存在了堆上),

  所有實例都使用一個原型,一但baz的屬性有引用類型就悲劇了,一個實例修改了其他實例也都跟著變了...wuwuwu

  自然就有了組合式繼承

  function baz(){this.oo="";}baz.prototype.xx=function(){}function foo(){baz.call(this);//第二次調用}foo.prototype=new baz();//第一次調用var myFoo=new foo();myFoo.oo;myFoo.xx;

  這樣就會有一個問題,代碼里也表明出來了,baz會被調用兩次,身為處女座的怎么可以允許呢..

  插一句,第二種方式就不用出現(xiàn)第一種方式的問題嗎?答案是不會的。

  原因是屬性的查找是先從對象自身開始,沒找到才會去原型中去找,call時就把屬性給繼承了。

  再插一句,那這樣只使用call繼承不就行了嗎?如果不使用原型這個是可行的,但是作為處女座怎么能不使用原型呢,

  在原型上方法是共享的,這樣性能就好了很多呀。

  寄生組合式繼承

  __extends=function (p,c){function ctor(){this.constructor=c;//賦值構造函數(shù)}ctor.prototype=p.prototype;c.prototype=new ctor();}function baz(){this.oo=[1];}baz.prototype.xx=function(){}__extends(baz,foo);function foo(){baz.call(this);}var myFoo=new foo();myFoo.oo;myFoo.xx;

  這樣不但解決了兩次調用的問題,還解決了對象調用構造函數(shù)時調用的是真實的創(chuàng)建對象的函數(shù)而不是原型鏈上其他的構造函數(shù)。

  代碼里有表明。

  構造函數(shù)是原型對象上的一個屬性,是對象的創(chuàng)建者。由于我們的原型屬性被從新賦值了所以構造函數(shù)時繼承來的。

  這里要說一下,對象是怎樣創(chuàng)建,也就是new都干了些什么。

  例如:

  var a=new b();

  其實是這樣的,a={};創(chuàng)建了一個給a,然后b.call(a);call里初始化a,在call之前還有一步,就是a的內部原型對象

  設置為b的原型屬性指向的原型對象。原型上有構造函數(shù)屬性,構造函數(shù)用來創(chuàng)建對象分配內存控件。

  大概就這些...看看時間也不早了,碎吧,保持平和的心態(tài)切勿浮躁,努力去改變明天,希望一切都會慢慢變好。

【JavaScript中繼承的深入理解】相關文章:

如何調試javascript腳本呢07-19

javascript跨域訪問的方法07-19

2022中考英語閱讀理解誒考前練習題11-18

閱讀理解的答題技巧02-03

英語閱讀理解題09-22

英語閱讀理解帶翻譯03-21

高三英語閱讀理解06-08

初三英語閱讀理解06-14

怎樣理解網球運動12-13

中考英語閱讀理解及解析03-25