摘要:面向?qū)ο缶幊谭绞剑瑢τ诔鯇W者來說,會比較難懂要學會面向?qū)ο笠约笆褂妹嫦驅(qū)ο缶幊蹋斫鈱ο蟮膭?chuàng)建在內(nèi)存中的表示,至關(guān)重要首先,我們來一段簡單的對象創(chuàng)建代碼衛(wèi)莊衛(wèi)莊上例,我們創(chuàng)建了兩個對象和如果有多個類似對象,我們可以通過函數(shù)封裝,這種函數(shù)封裝
javascript面向?qū)ο缶幊谭绞剑瑢τ诔鯇W者來說,會比較難懂. 要學會面向?qū)ο笠约笆褂妹嫦驅(qū)ο缶幊蹋斫鈱ο蟮膭?chuàng)建在內(nèi)存中的表示,至關(guān)重要.
首先,我們來一段簡單的對象創(chuàng)建代碼
1 var obj = new Object(); 2 obj.userName = "ghostwu"; 3 obj.showUserName = function(){ 4 return obj.userName; 5 }; 6 var obj2 = new Object(); 7 obj2.userName = "衛(wèi)莊"; 8 obj2.showUserName = function(){ 9 return obj2.userName; 10 }; 11 12 console.log( obj.showUserName() ); //ghostwu 13 console.log( obj2.showUserName() ); //衛(wèi)莊
上例,我們創(chuàng)建了兩個對象obj和obj2, 如果有多個類似對象,我們可以通過函數(shù)封裝,這種函數(shù)封裝方式,在設計模式里面叫工廠模式
1 function createObj( uName ){ 2 var obj = new Object(); 3 obj.userName = uName; 4 obj.showUserName = function(){ 5 return obj.userName; 6 } 7 return obj; 8 } 9 var obj1 = createObj( "ghostwu" ); 10 var obj2 = createObj( "衛(wèi)莊" ); 11 console.log( obj1.showUserName() ); //ghostwu 12 console.log( obj2.showUserName() ); //衛(wèi)莊
工廠模式簡化了創(chuàng)建多個類似對象的過程,但是卻不能識別對象的類型,為了識別對象的創(chuàng)建類型,我們可以使用構(gòu)造函數(shù)方式.
什么是構(gòu)造函數(shù)方式?
其實我們js很多創(chuàng)建內(nèi)存對象的方式 都是構(gòu)造函數(shù)方式,如,數(shù)組: var arr = new Array ( 5 ), 時間對象: var date = new Date()
函數(shù)前面帶上new關(guān)鍵字,是構(gòu)造函數(shù)的外在表現(xiàn)
1 function CreateObj( uName ){ 2 this.userName= uName; 3 this.showUserName = function(){ 4 return this.userName; 5 } 6 } 7 var obj1 = new CreateObj( "ghostwu" ); 8 var obj2 = new CreateObj( "衛(wèi)莊" ); 9 10 console.log( obj1.showUserName() ); //ghostwu 11 console.log( obj2.showUserName() ); //衛(wèi)莊
首先,明確幾個事實:
任何函數(shù)前面都可以用new關(guān)鍵字
如果用了new關(guān)鍵字, 函數(shù)中的this指向的是 創(chuàng)建出來的對象, obj1造出來的時候,this指向的就是obj1,
obj2造出來的時候,this指向的就是obj2.
構(gòu)造函數(shù)把屬性和方法直接賦值給this, 不需要創(chuàng)建一個對象( new Object() )
構(gòu)造函數(shù)會自動return this
每new一個函數(shù), 就會在內(nèi)存中,生成一個獨立的內(nèi)存區(qū)域,用來存儲當前的對象,以及對象上面的方法和屬性
如果構(gòu)造函數(shù)前面不用new去掉用,函數(shù)中的this指向的是window, 相當于給window加屬性和方法,函數(shù)沒有返回值,就是undefined
obj1 = CreateObj( "ghostwu" );
obj2 = CreateObj( "衛(wèi)莊" );
console.log( obj1 ); //undefined
console.log( obj2 ); //undefined
那向下面這樣調(diào)用,就會報錯
console.log( obj1.showUserName() ); //報錯
console.log( obj2.showUserName() ); //報錯
因為obj1和obj2都是undefined,showUserName被加到windows對象上了
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/84917.html
摘要:所以一句話理解的運算規(guī)則為檢測左側(cè)的原型鏈上,是否存在右側(cè)的原型。 上文,通過基本的對象創(chuàng)建問題了解了構(gòu)造函數(shù),本文,我們接著上文繼續(xù)了解構(gòu)造函數(shù)的基本特性,以及優(yōu)缺點. 每個對象上面都有一個constructor屬性( 嚴格意義上來說,是原型上的,對象是通過查找到原型找到 constructor屬性 ).后面講到原型的時候,我會用示意圖的方式說明 1 functio...
摘要:函數(shù)式編程導論從屬于筆者的前端入門與工程實踐。函數(shù)式編程即是在軟件開發(fā)的工程中避免使用共享狀態(tài)可變狀態(tài)以及副作用。 JavaScript 函數(shù)式編程導論從屬于筆者的Web 前端入門與工程實踐。本文很多地方是講解函數(shù)式編程的優(yōu)勢,就筆者個人而言是認可函數(shù)式編程具有一定的好處,但是不推崇徹底的函數(shù)式編程化,特別是對于復雜應用邏輯的開發(fā)。筆者在應用的狀態(tài)管理工具中就更傾向于使用MobX而不是...
摘要:設計模式是以面向?qū)ο缶幊虨榛A(chǔ)的,的面向?qū)ο缶幊毯蛡鹘y(tǒng)的的面向?qū)ο缶幊逃行┎顒e,這讓我一開始接觸的時候感到十分痛苦,但是這只能靠自己慢慢積累慢慢思考。想繼續(xù)了解設計模式必須要先搞懂面向?qū)ο缶幊蹋駝t只會讓你自己更痛苦。 JavaScript 中的構(gòu)造函數(shù) 學習總結(jié)。知識只有分享才有存在的意義。 是時候替換你的 for 循環(huán)大法了~ 《小分享》JavaScript中數(shù)組的那些迭代方法~ ...
閱讀 2265·2023-04-25 23:15
閱讀 1917·2021-11-22 09:34
閱讀 1546·2021-11-15 11:39
閱讀 955·2021-11-15 11:37
閱讀 2152·2021-10-14 09:43
閱讀 3493·2021-09-27 13:59
閱讀 1506·2019-08-30 15:43
閱讀 3454·2019-08-30 15:43