91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Javascript的類繼承是什么

發布時間:2021-07-21 19:50:08 來源:億速云 閱讀:133 作者:chen 欄目:web開發

本篇內容介紹了“Javascript的類繼承是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

說到Javascript類繼承,就必然離不開原型鏈,但只通過原型鏈實現的繼承有著不少缺陷。

無參數類繼承的問題

先看一段示例代碼,實現B繼承于A:

function A() {  }  A.prototype.a1 = function() {  };  function B() {  }  B.prototype = new A();  B.prototype.b1 = function() {  };  var b = new B();  alert(b.constructor == A); // true  alert(b.constructor == B); // false

這段代碼的主要問 題是:

1、需要實例化A作為B的原型,此時就執行了A的構造函數。但按照面向對象的規則,實例化B之前,B及其父類A的構造函數都不應該執行。

2、更改了B的prototype,導致b.constructor不是B而是A。

有參類繼承的問題

假設A和B都有兩個字符串參數s1和s2,A中計算了兩段字符串的總長度,B直接以s1、s2為參數調用A:

function A(s1, s2)   {  this.totalLength = s1.length + s2.length;  }  A.prototype.a1 = function()   {  };  function B(s1, s2)   {  }  B.prototype = new A();  B.prototype.b1 = function()   {  };  new B(“ab”, “123″);

可以看到,這段代碼中根本沒有辦法把s1和s2傳到A,而又因為實例化A作為B的原型時沒有 參數,所以出現了異常:

s1 is undefined

解決方案

s1 和s2的作用域只在B內,要把它們傳到A,就只能在B中操作,借助函數的apply方法就可以實現之:

function B(s1, s2)   {  A.apply(this, arguments);  alert(this.totalLength);  }

接下來的問題就是如何把A的方法添加到B的原型中去。這也不 難,只要遍歷A.prototype,把方法復制到B.prototype即可。要注意的是,對于同名的方法,自然是子類優先(重載), 因而不能覆蓋:

for (var m in A.prototype)   {  if (!B.prototype[m])   { // 父類不能覆蓋子類的方法  B.prototype[m] = A.prototype[m];  }  }

“Javascript的類繼承是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

镇安县| 伊川县| 奉化市| 和静县| 乌拉特中旗| 阿鲁科尔沁旗| 大关县| 丰台区| 丹寨县| 新龙县| 申扎县| 无锡市| 普兰店市| 晋宁县| 久治县| 丹东市| 怀柔区| 江西省| 曲靖市| 上思县| 灵武市| 措美县| 精河县| 治多县| 温宿县| 广安市| 凌云县| 临潭县| 肇源县| 宜兰县| 五常市| 宁南县| 疏勒县| 黔江区| 苍溪县| 巴马| 安化县| 光山县| 天全县| 阜宁县| 佳木斯市|