摘要:繼承原型式繼承所謂原型是繼承,就是定義一個函數,該函數中創建一個零食性的構造函數,將作為參數傳入的對象作為這個構造函數的原型,最后返回這個構造函數的實例對象。借助構造函數無論是原型鏈還是原型是繼承,都具有相同的問題。
繼承 原型鏈
原型鏈是說明
構造函數或構造器具有prototype屬性,對象具有proto屬性,這就是之前學習的原。如果構造函數或對象A 。A的原型指向構造函數或對象B,B的原型在指向構造函數或對象C,依次類推,最終的構造函數或對象原型指向Object的原型。由此形成一條鏈狀結構,被稱之為原型鏈。按照上述描述,在B中定義的屬性或發放,可以直接在A中使用不需要定義。 這就是繼承,它允許每一個對象訪問器原型鏈上的任何屬性和方法。
原型鏈實現繼承
function A(){
this.name ="a";
this.toString = function(){return this.name};
}
function B (){
this.name = "b";
}
function C(){
this.name ="c";
this.age=18;
this.getAge =function(){return this.age};
}
B.prototype =new A();
C.prototype =new B();
只繼承于原型
出于對效率的考慮,盡可能地將屬性和方法添加到原型上。可以采取以下方式:
不要為繼承關系多帶帶創建對象;
盡量減少運行的方法搜索。
代碼如下:
function A(){}
A.prototype.name ="a";
Aprototype.toString = function(){return this.name};
function B(){}
B.prototype=A.prototype;
B.prototype.name="b";
function C(){}
C.protype =B.protype;
C.protype.name="c";
C.protype.age=18;
C.protype.getAge =function(){return this.age};
原型鏈的問題
原型鏈雖然很強大,用它可以實現JavasScript中的繼承,但同時也存在一些問題。
原型鏈實際上是在多個構造函數或對象直接共享屬性或方法。
創建子類的對象是不能向父級的構造函數傳遞任何參數。
綜上所述,在實際開發中很少會多帶帶使用原型鏈。
原型式繼承
所謂原型是繼承,就是定義一個函數,該函數中創建一個零食性的構造函數,將作為參數傳入的對象作為這個構造函數的原型,最后返回這個構造函數的實例對象。
function object (o){
function F(){}
F.prototype = o ;
return new F();
}
根據原型繼承的總結的object()函數實現繼承,如下代碼:
var preson ={
name:"MARY",
friends:["Tom","King"]
}
var anotherPerson =object(person);
anotherperson.friends.push("Rob");
console.log(antherperson.friends);
這種原型繼承要求必須具有一個對象可以看作最為另一個對象的基礎。
借助構造函數
無論是原型鏈還是原型是繼承,都具有相同的問題。想要解決這樣的問題的話可以借助構造函數(也可以叫做偽造對象的經典繼承)。
這種方式實現非常簡單,就是在子對象的構造函數中調用父對象的構造函數。具體可以通過調用函數。
apply()call()方法實現。
apply()和call()方法都允許傳遞制定某個對象的this。對于繼承來講, 可以實現在子對象的構造函數中調用父對象的構造函數,將子對象的this和父對象的this綁定子啊一起。
代碼如下:
function SuperType(){
this.color=["red","green","blue"];
}
function SubType(){
SuperType.call(this);
}
var instance=new Subtype();
instance.color;
組合方式繼承
組合繼承,也叫做為經典繼承,指的是將原型鏈或原型繼承和借助構造函數的技術組合在一起,發揮二中的長處繼承方式。
集體實現的思路就是:
使用原型鏈或原型是繼承實現對原型的繼承屬性和方法的繼承。
通過借助構造函數實現的實例對象的屬性繼承。
這樣,即通過在原型上定義方法實現函數的重用,又可以保證每一個對象都又自己的專有屬性。
代碼如下:function SuperType(name){
this name = name;
}
superType.prototype.sayme=function(){
console.log(this.name)}
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/108368.html
摘要:在使用原型鏈實現繼承時有一些需要我們注意的地方注意繼承后的變化。在了解原型鏈時,不要忽略掉在末端還有默認的對象,這也是我們能在所有對象中使用等對象內置方法的原因。 在上一篇post中,介紹了原型的概念,了解到在javascript中構造函數、原型對象、實例三個好基友之間的關系:每一個構造函數都有一個守護神——原型對象,原型對象心里面也存著一個構造函數的位置,兩情相悅,而實例呢卻又...
摘要:繼承的繼承可以簡單的認為就是上篇文章中的寄生組合繼承模型幾乎一模一樣,只是在語法結構上多了和關鍵字,另外一個區別就是父類和子類通過連接。 ES5繼承 VS ES6繼承 前言 ES6 已經發展了很長時間里 javascript相對于其他例如java等是一門比較怪異的語言, 由于其歷史原因其繼承機制和對象生成方式被人詬病. ES6 的出現將徹底改變這一現狀, ES6 引入了新的生成對象(類...
摘要:首當其沖的便是接口中的每個聲明必須是即便不指定也是,并且不能設置為非,詳細規則可參考可見性部分介紹。函數式接口有著不同的場景,并被認為是對編程語言的一種強大的擴展。抽象類與中的接口有些類似,與中支持默認方法的接口更為相像。 原文鏈接:http://www.javacodegeeks.com/2015/09/how-to-design-classes-and-interfaces.htm...
摘要:構造函數通常首字母大寫,用于區分普通函數。這種關系常被稱為原型鏈,它解釋了為何一個對象會擁有定義在其他對象中的屬性和方法。中所有的對象,都有一個屬性,指向實例對象的構造函數原型由于是個非標準屬性,因此只有和兩個瀏覽器支持,標準方法是。 從這篇文章開始,復習 MDN 中級教程 的內容了,在初級教程中,我和大家分享了一些比較簡單基礎的知識點,并放在我的 【Cute-JavaScript】系...
摘要:在中對一個實例命名非常的簡單,在每一個類中可以有一個靜態的實例對象,可以用類的完全限定名作為實例的名字。但不管怎樣,用類的完全限定名作為實例的名字是一個非常好的方式。 本文是對log4j官網Introduction部分的翻譯,原文鏈接地址:http://logging.apache.org/log...。 Introduction: 幾乎每個大型應用都包含自己的日志API。1996年,...
閱讀 1800·2021-11-22 09:34
閱讀 3083·2019-08-30 15:55
閱讀 663·2019-08-30 15:53
閱讀 2054·2019-08-30 15:52
閱讀 3000·2019-08-29 18:32
閱讀 1989·2019-08-29 17:15
閱讀 2392·2019-08-29 13:14
閱讀 3557·2019-08-28 18:05