您好,登錄后才能下訂單哦!
今天小編給大家分享一下javascript中繼承指的是什么的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
在JavaScript中,繼承是一種允許在已有類的基礎上創建新類的機制;繼承為子類提供了靈活性,可以重用父類的方法和變量,繼承的過程就是一般到特殊的過程,可以利用原型鏈、構造函數來實現繼承。
本教程操作環境:windows10系統、javascript1.8.5版、Dell G3電腦。
JavaScript繼承是一種允許我們在已有類的基礎上創建新類的機制;它為子類提供了靈活性,可以重用父類的方法和變量。繼承的過程,就是從一般到特殊的過程。
它維持著一種IS-A關系。
extends關鍵字用于類表達式或類聲明中。
使用extends關鍵字,我們可以獲取內置對象的所有屬性和行為以及自定義類。
我們還可以使用基于原型的方法來實現繼承。
JavaScript如何實現繼承?
1、原型鏈
基本思想:利用原型讓一個引用類型繼承另外一個引用類型的屬性和方法。
構造函數,原型,實例之間的關系:每個構造函數都有一個原型對象,原型對象包含一個指向構造函數的指針,而實例都包含一個指向原型對象的內部指針。
原型鏈實現繼承例子:
function SuperType() { this.property = true; } SuperType.prototype.getSuperValue = function() { return this.property; } function subType() { this.property = false; } //繼承了SuperType SubType.prototype = new SuperType(); SubType.prototype.getSubValue = function (){ return this.property; } var instance = new SubType(); console.log(instance.getSuperValue());//true
2、借用構造函數
基本思想:在子類型構造函數的內部調用超類構造函數,通過使用call()和apply()方法可以在新創建的對象上執行構造函數。
例子:
function SuperType() { this.colors = ["red","blue","green"]; } function SubType() { SuperType.call(this);//繼承了SuperType } var instance1 = new SubType(); instance1.colors.push("black"); console.log(instance1.colors);//"red","blue","green","black" var instance2 = new SubType(); console.log(instance2.colors);//"red","blue","green"
3.組合繼承
基本思想:將原型鏈和借用構造函數的技術組合在一塊,從而發揮兩者之長的一種繼承模式。
例子:
function SuperType(name) { this.name = name; this.colors = ["red","blue","green"]; } SuperType.prototype.sayName = function() { console.log(this.name); } function SubType(name, age) { SuperType.call(this,name);//繼承屬性 this.age = age; } //繼承方法 SubType.prototype = new SuperType(); Subtype.prototype.constructor = Subtype; Subtype.prototype.sayAge = function() { console.log(this.age); } var instance1 = new SubType("EvanChen",18); instance1.colors.push("black"); consol.log(instance1.colors);//"red","blue","green","black" instance1.sayName();//"EvanChen" instance1.sayAge();//18 var instance2 = new SubType("EvanChen666",20); console.log(instance2.colors);//"red","blue","green" instance2.sayName();//"EvanChen666" instance2.sayAge();//20
4.原型式繼承
基本想法:借助原型可以基于已有的對象創建新對象,同時還不必須因此創建自定義的類型。
原型式繼承的思想可用以下函數來說明:
function object(o) { function F(){} F.prototype = o; return new F(); }
例子:
var person = { name:"EvanChen", friends:["Shelby","Court","Van"]; }; var anotherPerson = object(person); anotherPerson.name = "Greg"; anotherPerson.friends.push("Rob"); var yetAnotherPerson = object(person); yetAnotherPerson.name = "Linda"; yetAnotherPerson.friends.push("Barbie"); console.log(person.friends);//"Shelby","Court","Van","Rob","Barbie"
ECMAScript5通過新增Object.create()方法規范化了原型式繼承,這個方法接收兩個參數:一個用作新對象原型的對象和一個作為新對象定義額外屬性的對象。
var person = { name:"EvanChen", friends:["Shelby","Court","Van"]; }; var anotherPerson = Object.create(person); anotherPerson.name = "Greg"; anotherPerson.friends.push("Rob"); var yetAnotherPerson = Object.create(person); yetAnotherPerson.name = "Linda"; yetAnotherPerson.friends.push("Barbie"); console.log(person.friends);//"Shelby","Court","Van","Rob","Barbie"
5.寄生式繼承
基本思想:創建一個僅用于封裝繼承過程的函數,該函數在內部以某種方式來增強對象,最后再像真正是它做了所有工作一樣返回對象。
例子:
function createAnother(original) { var clone = object(original); clone.sayHi = function () { alert("hi"); }; return clone; } var person = { name:"EvanChen", friends:["Shelby","Court","Van"]; }; var anotherPerson = createAnother(person); anotherPerson.sayHi();///"hi"
6.寄生組合式繼承
基本思想:通過借用函數來繼承屬性,通過原型鏈的混成形式來繼承方法
其基本模型如下所示:
function inheritProperty(subType, superType) { var prototype = object(superType.prototype);//創建對象 prototype.constructor = subType;//增強對象 subType.prototype = prototype;//指定對象 }
例:
function SuperType(name){ this.name = name; this.colors = ["red","blue","green"]; } SuperType.prototype.sayName = function (){ alert(this.name); }; function SubType(name,age){ SuperType.call(this,name); this.age = age; } inheritProperty(SubType,SuperType); SubType.prototype.sayAge = function() { alert(this.age); }
以上就是“javascript中繼承指的是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。