摘要:這是實現繼承的最通用的方式,這種方法的缺點實例化子類的時候父級的構造函數執行了次,沒有必要執行次。
原型鏈類 創建對象有幾種方法
1、字面量對象
var o1 = {name:"1"}
var o11 = new Object({name:"11"})
2、顯示構造函數創建
var M = function(){this.name ="o2"}
var o2 = new M();
3.Object.create 方法來創建
var P = {"name":"o3"}
var o3 = Objcet.create(P)
原型、構造函數、實例、原型鏈 的概念
什么叫實例:
instanceof的原理 new運算符原理
面向對象繼承有哪幾種
1、借助構造函數實現繼承
function Parent1(){ this.name ="Parent1"} function Child1(){ Parent1.call(this) this.name = "child1" } 缺點父類原型鏈有方法屬性,子類拿不到 console.log(new Child1)
2、原型鏈實現繼承
function Parent2() { this.name = "Parents2" this.type = [1,23] } function Child2() { this.name = "Child2" } // Child2.prototype= new Parent2() console.log(new Child2) var c2 = new Child2 var c3 = new Child2 c3.type.push(3) 缺點:修改實例繼承父類的屬性,都會改變
3、組合繼承
function Parent3() { this.name = "Parents3"; this.play = [1, 23, 3]; } function Child3() { Parent3.call(this) this.type = "child3" } Child3.prototype = new Parent3() var c3 = new Child3() var c4 = new Child3() console.log(c3.play); console.log(c4.play); c3.play.splice(1, 1) console.log(c3.play); console.log(c4.play); 組合繼承的優點就是修改實例的屬性,不會改變父類的屬性。 這是實現繼承的最通用的方式,這種方法的缺點實例化子類的時候父級的構造函數執行了2次,沒有必要執行2次。所以出了優化方法
4、優化方式
function Parent4() { this.name = "Parents4"; this.play = [1, 23, 3]; } function Child4() { Parent3.call(this) this.type = "child4" } Child4.prototype = Parent4.prototype var c5 = new Child4() var c6 = new Child4() console.log(c4.play); console.log(c5.play); c3.play.splice(1, 1) console.log(c4.play); console.log(c5.play); 首先通過call方法把子類實例拿到父類的屬性和方法,然后通過父類的原型賦值給子類,拿到父類原型上的屬性和方法,這樣就實現了繼承了
這種方式還有缺點嗎
c5 instanceof Child4 c5 instanceof Parent4 //true
如何區分一個對象由子類實例化,還是父類實例化的
這時候c5.constructor 指向了Parent4構造函數
為什么指向了parent4構造函數而不是指向Child4構造函數呢,因為上邊有一句是
Child4.prototype = Parent4.prototype
這時候子類的原型指向了父類的原型,所以子類的實例當然是指向了父類構造函數了。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/99752.html
摘要:說白了,原型就是構造函數用來構造新實例的模板對象。什么是原型鏈先回答什么是原型。例如這個原型的原型就是這個構造函數的,既這個原型對象。這些原型對象通過像鏈子一樣連起來,就叫做原型鏈。 原型鏈初步學習 這篇博客只是我初步理解原型鏈的一個個人學習筆記,寫的比較粗略,且有的地方可能理解錯誤. 更多更專業的關于原型鏈的解釋請看JavaScript深入之從原型到原型鏈和阮一峰的博客:Javas...
摘要:之二關于原型開篇我記得初學時,最難懂的概念就是的原型,而且這個概念在筆試面試中常常提到,因此今天我們把這個概念拿出來,好好聊一聊。 之二:關于js原型 1. 開篇 我記得初學js時,最難懂的概念就是js的原型,而且這個概念在筆試面試中常常提到,因此今天我們把這個概念拿出來,好好聊一聊。 在仔細講解之前,我們先來看一道題,這道題來自JavaScript高級程序設計中原型鏈那一節: fun...
摘要:一是如何工作的在上是這樣描述的運算符用于測試構造函數的屬性是否出現在對象原型鏈中的任何位置換句話說,如果,那么必須是一個對象,而必須是一個合法的函數。下面我們舉一個例子一步步來說明第一步每一個構造函數都有一個屬性。 在 JavaScript 中,我們通常用 typeof 判斷類型,但是在判斷引用類型的值時,常常會遇到一個問題:無論引用的是什么類型的對象,都會返回 object(當然還有...
摘要:以上是面試中筆試涉及到的知識點或者后面被問到的只是點。也許是根據薪資和面試的等級來出題的。我剛面試完回家,吃了一個泡面,回憶下面試題。同時作為傳遞到構造函數,執行了一次讓構造函數里面的屬性和方法賦值了一份給。 css 如何水平垂直居中,請盡量多說幾種方法?很尷尬,我多次面試都被問到這個問題,fuck 定位(回答了)、table-cell布局、flex布局、translate+relat...
摘要:以上是面試中筆試涉及到的知識點或者后面被問到的只是點。也許是根據薪資和面試的等級來出題的。我剛面試完回家,吃了一個泡面,回憶下面試題。同時作為傳遞到構造函數,執行了一次讓構造函數里面的屬性和方法賦值了一份給。 css 如何水平垂直居中,請盡量多說幾種方法?很尷尬,我多次面試都被問到這個問題,fuck 定位(回答了)、table-cell布局、flex布局、translate+relat...
閱讀 3049·2021-11-18 10:02
閱讀 3315·2021-11-02 14:48
閱讀 3384·2019-08-30 13:52
閱讀 527·2019-08-29 17:10
閱讀 2070·2019-08-29 12:53
閱讀 1392·2019-08-29 12:53
閱讀 1018·2019-08-29 12:25
閱讀 2155·2019-08-29 12:17