摘要:概述到這里我們講說面向?qū)ο蟮南盗胁糠值淖詈笠粋€課程,面向?qū)ο蟊仨氄莆諆蓚€東西一個是對象的創(chuàng)建一個是繼承。只需要記住一句話,屬性放在構(gòu)造函數(shù)里面,方法放在原型上。
概述
到這里我們講說js面向?qū)ο蟮南盗胁糠值淖詈笠粋€課程,面向?qū)ο蟊仨氄莆諆蓚€東西一個是對象的創(chuàng)建一個是繼承。這節(jié)課我們重點說說這兩個問題最后我們說下在ES6里面面向?qū)ο笤趺赐妗?/p> 1對象的創(chuàng)建
我們第一節(jié)課已經(jīng)就會用了,單體模式,你可以管它叫json我也不想多說就是這個。
var girlFriend = { //屬性: hair:"long", eye:"big", hobby:"travel", //方法 cook:function(){}, wash:function(){} };
下面我說一種更普遍的方式,這個大家看到的情況更普遍,我們一直說js的對象和傳統(tǒng)對象不一樣它是基于原型的,那么看看創(chuàng)建對象方式。
只需要記住一句話,屬性放在構(gòu)造函數(shù)里面,方法放在原型上。
好現(xiàn)在我們重新搞一個妹子,用你熟悉的姿勢。
//屬性放在構(gòu)造函數(shù)里 function Girl (hair,eye,hobby){ this.hair = hair; this.eye = eye; this.hobby = hobby; } //方法放在原型上 Girl.prototype.cook = function(){}; Girl.prototype.wash = function(){} var girlFriend = new Girl("long","big","travel");
這樣不挺好嗎,我們都這樣用啊。
這里我就說下,new關(guān)鍵字的由來。
簡單的說new關(guān)鍵字并不該出現(xiàn)在js里,或者說并不是技術(shù)原因,僅僅是因為為了爭取java那部分用戶,所以javascript才叫javascript,然后類這一塊又使用了new關(guān)鍵字去符合java程序員的習慣,贏得他們的好感,所以new關(guān)鍵字的出現(xiàn)其實是一個市場策略。但是問題來了,javascript基于原型和java這些語言的類跟js根本不是一個概念new怎么用啊?好,我們上例子說明:
//屬性放在構(gòu)造函數(shù)里 function Girl (hair,eye,hobby){ this.hair = hair; this.eye = eye; this.hobby = hobby; } //方法放在原型上 Girl.prototype.cook = function(){}; Girl.prototype.wash = function(){} var girlFriend = new Girl("long","big","travel");
那new關(guān)鍵字干嘛了?
簡單的說做了三件事:
1.執(zhí)行構(gòu)造函數(shù)(別太擔心名詞,就當成普通函數(shù)就行,一nainai區(qū)別都沒) 2.在Girl這個構(gòu)造函數(shù)里面,創(chuàng)建一個 空白的Object 3.將 this 指向這個空白的Object
這里使用我并不推薦使用new,為什么?
有人說使用new可能出現(xiàn)的問題是把new忘掉了就會返回undefined,比如我道哥(Douglas Crockford"s,JSON的創(chuàng)造者,《javascript語言精髓》的作者,多說一句,《javascript語言精髓》初學者不要看,你會只有兩個問題,這個畫的是啥,這特么畫的又是啥),但是個人認為關(guān)鍵原因不是這個,畢竟修復忘掉的new至少有兩種方式,一種大寫構(gòu)造函數(shù)方法首字母作為提醒,一種是用函數(shù)方法,我這里就不展開說了,畢竟不重要。
關(guān)鍵原因是JavaScript是一種prototypical類型語言,在創(chuàng)建之初,是為了迎合市場的需要,讓人們覺得它和Java是類似的,才引入了new關(guān)鍵字。Javascript本應通過它的Prototypical特性來實現(xiàn)實例化和繼承,但new關(guān)鍵字讓它變得不倫不類。
不廢話怎么解決,
一種方式是使用jquery的方式,返回一個含有new 對象的函數(shù),但是這個并沒有從本質(zhì)上改變使用new.
第二種方式徹底拋棄new.
作為一個面向?qū)ο缶幊虩o非就關(guān)心兩件事,創(chuàng)建和繼承。
那好我們看看創(chuàng)建的時候怎么搞,
第一種方式,單體模式,不用墨跡了。
第二種方式,就不講了,其實就是jquery那個方式,我們怎么簡單怎么來。
單體模式
var girlFriend = { //屬性: hair:"long", eye:"big", hobby:"travel", //方法 cook:function(){}, wash:function(){} };
好關(guān)鍵看繼承,我們看見你女兒怎么把你女朋友的優(yōu)良基因繼承下來的。
簡單的令人發(fā)指。
var daughter = Object.create(girlFriend);
完了,確實完了,這就繼承完了,以前的改this指向,什么修改原型,去你妹的統(tǒng)統(tǒng)的沒了。
我知道你想說啥,我擦嘞,兼容性咋樣。好吧,本著授人以魚不如授人以紅燒魚的精神,大彬哥給你搞一把
Object.prototype.create = Object.prototype.create||function(o){ function F(){} F.prototype = o; return new F(); };
好,這樣就鳥了,多么藍的天啊,面向?qū)ο蟮恼Z法就結(jié)束了,剩下的就是面向?qū)ο蟮膶嶋H案例了,比如組件化開發(fā),后面我們就看看實際庫怎么玩的。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/82750.html
摘要:你可以用指令在表單控件元素上創(chuàng)建雙向數(shù)據(jù)綁定。會根據(jù)控件類型自動選取正確的方法來更新元素。如果要自動過濾用戶輸入的首尾空格,可以添加修飾符到上過濾輸入 這節(jié)我們?yōu)榇蠹医榻B Vue.js 表單上的應用。 你可以用 v-model 指令在表單控件元素上創(chuàng)建雙向數(shù)據(jù)綁定。showImg(https://segmentfault.com/img/bVOfeD?w=700&h=372); v-m...
摘要:面向過程函數(shù)式編程面向?qū)ο缶幊痰诙€并不是大家理解的那樣,我們先說舉個現(xiàn)實例子就明白了。多說一句函數(shù)是編程是非常強大也是我最喜歡的,以后再說,我們先說面向?qū)ο缶幊獭? 概述 當大家已經(jīng)把js的語言基礎理解了,然后能夠?qū)懗鲆恍┖唵蔚睦恿耍@個時候基本上達到了一年工作經(jīng)驗的水平,而自己能夠獨立的寫一些小功能,完成一些小效果,或者臨摹修改一些比較復雜的插件的時候差不多就是兩年工作經(jīng)驗的水平,...
摘要:是現(xiàn)在廣泛流行的代從開始學習系列之向提交代碼掘金讀完本文大概需要分鐘。為了進行高效的垃圾回收,虛擬機把堆內(nèi)存劃分成新生代老年代和永久代中無永久代,使用實現(xiàn)三塊區(qū)域。 React Native 開源項目 - 仿美團客戶端 (Android、iOS 雙適配) - Android - 掘金推薦 React Native 學習好項目,仿照美團客戶端... 極簡 GitHub 上手教程 - 工具...
閱讀 2732·2023-04-25 14:21
閱讀 1167·2021-11-23 09:51
閱讀 3999·2021-09-22 15:43
閱讀 605·2019-08-30 15:55
閱讀 1550·2019-08-29 11:28
閱讀 2438·2019-08-26 11:44
閱讀 1675·2019-08-23 18:15
閱讀 2874·2019-08-23 16:42