摘要:繼承是面向對象編程語言中的一個重要的概念,繼承可以使得子類具有父類的屬性和方法或者重新定義追加屬性和方法等。但是在中沒有類的概念,是基于原型的語言,所以這就意味著對象可以直接從其他對象繼承。
繼承是面向對象編程語言中的一個重要的概念,繼承可以使得子類具有父類的屬性和方法或者重新定義、追加屬性和方法等。但是在Javascript中沒有類的概念,是基于原型的語言,所以這就意味著對象可以直接從其他對象繼承。
Ecmascript中描述了原型鏈的概念,并將原型鏈作為繼承的主要方法,主要是想利用原型鏈讓一個引用類型繼承另一個引用類型的屬性和方法。
構造函數、原型對象、實例之間的關系是:每個構造函數都有一個原型對象,每個原型對象中都有一個指針指向了該構造函數(constructor):
function A(){} A.prototype.constructor == A //true
而實例中有一個內部的指針指向了原型對象([[prototype]]),在chrome,firefox等幾款瀏覽器的JS引擎中加入了__proto__來訪問原型對象[[prototype]]:
function B(){} var b = new B(); b.__proto__ == B.prototype // true
當在實例對象中查找某一屬性或方法的時候,會優先查找當前實例中是否包含該屬性,如果未找到,便會在該實例的原型對象中查找,如果還未找到,就會再沿著原型對象中的內部原型指針繼續往上層原型對象查找,層層遞進,這樣就構成了所謂的原型鏈。
function SuperType() { this.peoperty = true; } SuperType.prototype.getSuperValue = function() { return this.property; } function SubType() { this.subproperty = false; } SubType.prototype = new SuperType(); SubType.prototype.getSubValue = function() { return this.subproperty; } var instance = new SubType(); console.log(instance.getSuperValue()); //true
上面的代碼中SubType繼承了SuperType,這是通過將SuperType的實例賦給SubType.prototype實現的,本質是重寫了SubType的原型對象。
在Javascript中,所有引用類型都默認繼承了Object,一樣都是通過原型鏈來繼承的。所以所有函數的默認原型都是Object.prototype,因此默認原型內部都會有一個指向Object.prototype的指針,所以上面的代碼的原型鏈圖形的頂層應該還有一個Object:
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/88228.html
摘要:原型要掌握這三者之間的關系,通過代碼例子記錄一下自身屬性的這里就是通過代碼看一下做了什么默認情況下,將的所有屬性包括繼承的賦值給有什么東西呢自己的原型鏈,添加一個屬性,用來指明對象的誰構造的自身全部屬性,這邊構建一個空對象原型,所以沒有自有 原型 要掌握這三者之間的關系prototype,constructor,__proto__通過代碼例子記錄一下 function F() { ...
摘要:命令作用作用是執行構造函數,返回實例對象上面例子是自定義一個構造函數,其最大的特點就是首字母大寫,用執行構造函數其中,在的執行下,代表了實例化后的對象,這個也就有屬性注意點如果不用執行構造函數,那么指向的是全局有兩種方式可以避免內部定義嚴格 new命令 new作用 作用是執行構造函數,返回實例對象 function F() { this.name = object } var ...
摘要:它不區分該屬性是對象自身的屬性,還是繼承的屬性。那么我們要遍歷對象所有屬性,包括繼承以及不可遍歷的屬性,用加原型遍歷實現類似的用遞歸 Object靜態方法 Object自身方法,必須由Object調用,實例對象并不能調用 Object.getPrototypeOf() 作用是獲取目標對象的原型 function F() {}; var obj = new F(); console.lo...
摘要:對象拷貝可遍歷屬性淺拷貝簡單的淺拷貝可以用,對存取器定義的對象也試用深拷貝屬性描述對象的拷貝這是個淺拷貝深拷貝不可遍歷屬性對象的拷貝例如拷貝獲得共同的原型,與是兄弟關系說明也繼承了原型,同級別簡潔化版 對象拷貝 可遍歷屬性 淺拷貝 if(typeof Object.prototype.copy != function) { Object.prototype.copy = fun...
摘要:里面關于抽象類的相關介紹中并沒有提供抽象類與抽象方法,但是提供了內置模塊來模擬實現抽象類。主要類或函數這是用來生成抽象基礎類的元類。繼承方式中的抽象類模塊定義了幾個抽象類。 PEP里面關于抽象類的相關介紹:https://www.python.org/dev/pe...python中并沒有提供抽象類與抽象方法,但是提供了內置模塊abc(abstract base class)來模擬實現...
閱讀 947·2021-09-26 09:55
閱讀 3192·2021-09-22 15:36
閱讀 2982·2021-09-04 16:48
閱讀 3142·2021-09-01 11:41
閱讀 2591·2019-08-30 13:49
閱讀 1492·2019-08-29 18:46
閱讀 3546·2019-08-29 17:28
閱讀 3425·2019-08-29 14:11