日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

js - prototype 继承

發布時間:2025/4/9 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js - prototype 继承 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基本的用法 把ClassA的一個實例賦值給ClassB ClassB就繼承了ClassA的所有屬性

1 function ClassA(){ 2 this.a='a'; 3 } 4 function ClassB(){ 5 this.b='b'; 6 } 7 ClassB.prototype=new ClassA(); 8 var objB=new ClassB(); 9 for(var p in objB)document.write(p+"<br>");

從原型繼承理論的角度去考慮 js的原型繼承是引用原型 不是復制原型
所以 修改原型會導致所有B的實例的變化

1 function ClassA(){ 2 this.a='a'; 3 } 4 function ClassB(){ 5 this.b='b'; 6 } 7 ClassB.prototype=new ClassA(); 8 var objB=new ClassB(); 9 alert(objB.a); 10 ClassB.prototype.a='changed!!'; 11 alert(objB.a);

?

然而 子類對象的寫操作只訪問子類對象中成員 它們之間不會互相影響
因此 寫是寫子類 讀是讀原型(如果子類中沒有的話)

1 function ClassA(){ 2 this.a='a'; 3 } 4 function ClassB(){ 5 this.b='b'; 6 } 7 ClassB.prototype=new ClassA(); 8 var objB1=new ClassB(); 9 var objB2=new ClassB(); 10 objB1.a='!!!'; 11 alert(objB1.a);

接下來是致命的,在子類對象中訪問原型的成員對象:

1 function ClassA(){ 2 this.a=[]; 3 } 4 function ClassB(){ 5 this.b=function(){alert();}; 6 } 7 ClassB.prototype=new ClassA(); 8 var objB1=new ClassB(); 9 var objB2=new ClassB(); 10 objB1.a.push(1,2,3); 11 alert(objB2.a); 12 alert(objB2.a); 13 //所有b的實例中的a成員全都變了!! 14 //所以 在prototype繼承中 原型類中不能有成員對象! 所有成員必須是值類型數據(string也可以)

只簡單的這樣設置繼承的確如樓主所說,有不少缺點??偟膩碚f有四個缺點:

  缺點一:父類的構造函數不是像JAVA中那樣在給子類進行實例化時執行的,而是在設置繼承的時候執行的,并且只執行一次。這往往不是我們希望的,特別是父類的構造函數中有一些特殊操作的情況下。

  缺點二:由于父類的構造函數不是在子類進行實例化時執行,在父類的構造函數中設置的成員變量到了子類中就成了所有實例對象公有的公共變量。由于JavaScript中繼承只發生在“獲取”屬性的值時,對于屬性的值是String,Number和Boolean這些數據本身不能被修改的類型時沒有什么影響。但是Array和Object類型就會有問題。
  缺點三:如果父類的構造函數需要參數,我們就沒有辦法了。

  缺點四:子類原本的原型對象被替換了,子類本身的constructor屬性就沒有了。在類的實例取它的constructor屬性時,取得的是從父類中繼承的constructor屬性,從而constructor的值是父類而不是子類。

1 //類的繼承-海浪版 2 Function.prototype.Extends = function (parentClass){ 3 var Bs = new Function(); 4 Bs.prototype = parentClass.prototype; 5 this.prototype = new Bs(); 6 this.prototype.Super = parentClass; 7 this.prototype.constructor = this; 8 }

?

?

?

?

?

先來看看用new形式創建對象的過程:

1//以func()作為構造函數創建一個對象obj
2var?obj=new?func();

這個過程是這樣的:javascript引擎首先遇到了關鍵字new后,馬上開辟了一塊內存,創建了一個空對象(并且將this指向這個對象),接著執行構造函數func()對這個空對象進行構造(構造函數里面有什么屬性和方法都一一給這個空白對象裝配上去,這也就是為什么構造函數叫“構造函數”的原因)。

其實,new和執行構造函數之間還有一件事引擎沒有顯式地告訴我們,而是偷偷地做了,這就是給這個空對象賦予prototype對象。

這里不得不提到一個跟prototype一樣同樣是系統保留而且同樣重要的東西:__proto__

__proto__是一個對象自動擁有的內置屬性(請注意:prototype是函數的內置屬性,__proto__是對象的內置屬性,但它們最終都指向同一個對象,就是那個用來被繼承的對象),用chrome和FF都可以訪問到一個對象的__proto__屬性,IE就不可以。

正是一個對象的__proto__指向著這個對象的構造函數的prototype對象,才使這個對象認識了它的構造函數的prototype對象,并擁有了這個prototype對象的屬性和方法。

所以var obj=new func()這個過程更具體是這樣的:

  • javascript解析引擎遇到new后,開辟一片內存并創建了一個空對象,并且將“this”指向這個空對象
  • javascript解析引擎將這個空對象的__proto__指向后面緊跟著的構造函數默認的prototype對象(一指向到prototype對象后,解析引擎就知道了“噢,這個對象要擁有這個prototype對象的屬性和方法了”)
  • javascript解析引擎執行構造函數體內的代碼,也就正式開始對這個空對象進行構造(或者說裝配)的過程了(this.name="xxx",this.sayHello=function(){...}等等)
  • 對象被構造裝配好,并賦值到等號左邊的變量。
  • 轉載于:https://www.cnblogs.com/piaozhe116/p/5511594.html

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的js - prototype 继承的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲成人av电影网站 | 亚洲天堂免费看 | 一本一道无码中文字幕精品热 | 久久97精品久久久久久久不卡 | 中文字幕一区二区三区四区视频 | 久久这里只有精品8 | 久久久96| 天海翼视频在线观看 | 男女日批 | 日韩小视频在线观看 | 午夜私人福利 | 国产欧美精品在线观看 | 在线免费观看亚洲 | 狠狠干在线视频 | www.国产在线视频 | 欧美大白bbbb与bbbb | av毛片在线看 | 精品国产一区二区三 | 日韩欧美大片在线观看 | 天天舔天天爽 | www日本免费 | 黄色av地址 | 欧美a视频在线观看 | 天堂视频免费看 | 白丝美女被草 | 国产精品国产一区二区三区四区 | 久久精品亚洲无码 | 快色污| 欧美另类性 | 久久精品一级片 | 欧美成人一级视频 | 青青青av | 中文字幕在线观看精品 | 青青草原国产视频 | 天天色综 | 欧美日韩一区二区久久 | 亚洲黄色在线免费观看 | 福利小视频在线播放 | 国产在线播放网站 | 欧美精品首页 | 黄污视频在线观看 | 成人午夜视频免费在线观看 | www.xxx国产| 丰满人妻一区二区三区免费 | 亚洲不卡在线视频 | 人人亚洲| 正在播放老肥熟妇露脸 | 久久一区二区三区四区 | 亚洲国产麻豆 | 午夜网页 | 欧美一区二区三区婷婷月色 | 干爹你真棒插曲免费 | 亚洲人女屁股眼交6 | 欧美黑人性猛交xxxx | 青青草原国产在线 | 欧美成人做爰猛烈床戏 | 欧美熟妇精品久久久久久 | 就要操就要日 | 国产福利av | 色偷偷免费视频 | 美女扒开尿口让男人爽 | 美女被草 | 黄色大片日本 | 毛片天天看 | 亚洲一区二区三区视频在线 | 一区二区三区视频观看 | 亚洲一区二区久久久 | 诱惑の诱惑筱田优在线播放 | 久久乐视频 | 丰满人妻一区二区三区免费视频棣 | 日韩av中文在线 | 免费一级黄色片 | av丝袜在线观看 | 亚洲再线 | 黄色一级免费观看 | 天天天天天天天天干 | 亚洲女人av| 亚洲国产日韩a在线播放性色 | 香蕉视频在线看 | 一级片美女 | 黄色激情在线观看 | 美女扒开粉嫩尿口 | 色婷婷色 | 黑人大群体交免费视频 | www.色偷偷| 国语对白少妇spa私密按摩 | 久久露脸 | 国产精品美女www爽爽爽 | 在线观看免费的av | 黄色一区二区三区 | 五十路息子 | 欧美不在线 | 我爱av好色 | 国产婷婷在线观看 | avtt香蕉久久 | 黑人干亚洲女人 | 不卡视频在线播放 | 亚洲一区二区三区欧美 | 免费久久久久 |