摘要:一相當于拿實例對象的名字來給原型命名。不專業(yè)點說的實例函數(shù)為匿名函數(shù),而中,構造函數(shù)即原型鏈展示的原型為匿名函數(shù)。關系圖不通過創(chuàng)造,不通過各種情況擾亂的情況下分析為原型屬性,展示構造函數(shù),比如上面舉例的某同學的媽媽構造函數(shù)。
這篇文章只是我個人的見解,因為也是今年剛畢業(yè),所以理解不一定非常的準確,如果理解有誤希望大家告訴我。
一、class 相當于 拿實例對象的名字 來給 原型 命名。
為什么這么說呢。
先說說 es6中的用法 :
class testClass{ constructor(name,age){ this.name = name; this.age = age; } printFn() { console.log(this.age); } } new testClass("hello",18).printFn()//18
這個類用 es5怎么寫呢:
function testProto(name,age) { this.name = name; this.age = age; } testProto.prototype.printFn = function(){ console.log(this.age); } new testProto("hello",18).printFn();
其實寫法上是差不太多的。
不專業(yè)點說:class的實例函數(shù)(constructor)為匿名函數(shù),而es5中,構造函數(shù)(即原型鏈prototype展示的原型)為匿名函數(shù)。
class例子中,class是有名字的 —— testClass,每個類的constructor唯一,就像每本書的目錄 是唯一的,那么翻書的時候,正常說法就是打開 某本書的目錄,而不用特意去給目錄命名。
es5例子中,實例函數(shù)的名字是唯一的 —— testProto,他的構造對象,就是,他的原型鏈對象,testProto.prototype。這就像老師找學生家長聊天一樣,一般老師都會說,讓某同學(testProto)的媽媽(prototype)過來一下,某同學的名字已知,那么他的媽媽也就確定了。當實例化的時候(new testProto()),這個對象的名字就是以某同學的名字命名的。
prototype,constructor,__proto__關系圖(不通過create創(chuàng)造,不通過各種情況擾亂的情況下分析);
prototype為原型屬性,展示構造函數(shù),比如上面舉例的某同學的媽媽(構造函數(shù))。某同學就是他媽媽生(實例)的對象。這個用類的思想比較好理解,我們平時調(diào)用的方法,其實都是一個原型的實例化(constructor)。
實例化對象之后,屬性會存在于對象的__proto__中,當調(diào)用一個屬性的時候,如果這個對象中沒有,就回去他的__proto__中查找。
舉個例子:
function test1() {console.log("test1")}; test1.prototype.test2 = function(){console.log(0)}; new test1().__proto__ .test2 == new test1().test2//true; new test1()實例化之后的結(jié)構大概如下: test1 { __proto__:{ construtor:function(){console.log("test1")}, test2: function(){console.log(0)} } } construtor會被立即執(zhí)行 所以 控制臺會分別打印出 test1 ;test1 ;true;第一個test1 是執(zhí)行new test1().__proto__ .test2這句話時候打印出來的,第二個test1是執(zhí)行這句話new test1().test2的時候打印出來的。 new test1().constructor == test1//true; new test1().__proto__.constructor == test1 //true; 這句話可以證明“我們平時調(diào)用的方法,其實都是一個原型的實例化(constructor)。實例化對象之后,屬性會存在于對象的__proto__中,當調(diào)用一個屬性的時候,如果這個對象中沒有,就回去他的__proto__中查找?!?
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/90796.html
摘要:面向?qū)ο髮崿F(xiàn)代碼動物發(fā)聲汪汪喵喵調(diào)用代碼動物發(fā)聲喵喵動物發(fā)聲汪汪當要增加一種動物時,只需增加一個繼承,不會影響其他已有的動物邏輯。所以的繼承和的原型繼承,可謂殊途同歸。 傳統(tǒng)面向?qū)ο蟮睦^承和多態(tài) 我們知道C++/Java/C#等面向?qū)ο笳Z言,都原生地支持類的繼承。繼承的核心作用大抵是創(chuàng)建一個派生類,并使其復用基本類(即父類)的字段和/或方法。并且派生類可以重寫基本類的方法。這樣基本類和...
摘要:實例擁有構造函數(shù)屬性,該屬性返回創(chuàng)建實例對象的構造函數(shù)。在考慮對象而不是自定義類型和構造函數(shù)的情況下,寄生式繼承也是一種有用的模式。在子類的構造函數(shù)中,只有調(diào)用之后,才能使用關鍵字,否則報錯。 不積跬步無以至千里。 關于【Step-By-Step】 Step-By-Step (點擊進入項目) 是我于 2019-05-20 開始的一個項目,每個工作日發(fā)布一道面試題。每個周末我會仔細閱讀...
摘要:在這個情況下我們可能需要使用構造函數(shù),其以指定的模式來創(chuàng)造對象。構造函數(shù)也有自己的,值為,也通過其屬性關聯(lián)到。從邏輯上來說,這是以棧的形式實現(xiàn)的,它叫作執(zhí)行上下文棧。 原文:http://dmitrysoshnikov.com/ecmascript/javascript-the-core/ 對象 原型鏈 構造函數(shù) 執(zhí)行上下文棧 執(zhí)行上下文 變量對象 活動對象 作用域鏈 閉包 Thi...
閱讀 3588·2021-10-08 10:15
閱讀 6524·2021-09-23 11:56
閱讀 1542·2019-08-30 15:55
閱讀 554·2019-08-29 16:05
閱讀 2810·2019-08-29 12:34
閱讀 2116·2019-08-29 12:18
閱讀 986·2019-08-26 12:02
閱讀 1753·2019-08-26 12:00