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