摘要:原型鏈理解第一件事你不用管其他語言,一句話,你只要記住里面的對象包含一個原型,原型是啥,就是另外一個對象。原型就相當(dāng)于你家的車棚子,而你的那個自行車就是對象。萬事萬物皆對象有啥用一句話,擴(kuò)展原型方法,給大家一到面試題,數(shù)組去重自己體會下。
概述
通過上節(jié)課的學(xué)習(xí),大家已經(jīng)會用一種json的方式定義對象了,其實這個就是傳說中的單體模式,當(dāng)然這個大家不用記,關(guān)于設(shè)計模式暫時不用了解。但是總感覺哪里跟你平常用的或者聽到的不一樣吧,比如好像js聽說有什么原型繼承,還有它的對象好像跟傳統(tǒng)的js對象不一樣什么的。好,今天我就讓你徹底明白里面的花花草草。
1.原型鏈理解第一件事你不用管其他語言,一句話,你只要記住js里面的對象包含一個原型,原型是啥,就是另外一個對象。
舉個例子:
你每天騎著自行車去上學(xué),然后你車子壞了咋弄,要么去自己家的車棚子里推一輛繼續(xù)騎,要么從車棚子里找到工具修修。
原型就相當(dāng)于你家的車棚子,而你的那個自行車就是對象。
自行車上的書包是你人為加上去的,而螺絲刀、和輪胎有些是你自行車必須有的東西,有些是修理你自行車的東西。好,我們回到代碼表示一下。
var bike = { 車筐:"書包" }; console.log(bike);//Object {車筐: "書包"} //怎么看車棚子,也就是原型,里面放著各種方法和屬性 console.log(bike.__proto__)
記住,這個車棚里面有各種工具和零件,很拽,還能生產(chǎn)自行車。理解到這個程度就行了,有一天你放學(xué)回家了到家發(fā)現(xiàn)你的書包不見了,你怎么辦,肯定是先看看自己的車子上有么有,沒有咋弄,去車棚找,車棚子沒有,車棚子很拽,上面還有個生產(chǎn)車棚子的__proto_proto逐層向上查找就是原型鏈查找。如圖。
圖片描述
2.原型的用途? 我知道這個有什么用?好我們看一個實際的情況,https://docs.angularjs.org/ap...
? angular的merge函數(shù),簡單的說,有一個對象a,還有一個對象b,我想把兩個對象合并成一個對象怎么實現(xiàn)?注意要求只是合并人加的,原型上的不算。
? 直接上源碼,簡單的讓人發(fā)指,這個就是angular的架構(gòu)(1.6.2)我粗糙的實現(xiàn)了一下。
(function(window) { var angular = window.angular || (window.angular = {}); angular.merge=function(dst,src){ for(var prop in src){ if(src.hasOwnProperty(prop)){ dst[prop] =src[prop]; } } return dst; } })(window); var person = { name:"leo", age:18 }; var person2 = { job:"教前端的" }; console.log(angular.merge(person,person2)); // https://docs.angularjs.org/api/ng/function/angular.merge
hasOwnProperty這個用來判斷只是自己直接添加的對象,現(xiàn)在知道用途了吧?理解了js原理,能看懂和實現(xiàn)angular的庫,你還發(fā)愁自己不會用angular嗎?
2.萬事萬物皆對象? 經(jīng)常聽人說,js萬事萬物皆對象
? 怎么證明,不墨跡上代碼
?
var num = 12; console.log(num.__proto__); var str = "abc"; console.log(str.__proto__); var arr = []; console.log(arr.__proto__.__proto__); var json = {}; console.log(json.__proto__.__proto__);
不解釋,一句話,所有對象都有一個祖宗對象Object。
3.萬事萬物皆對象有啥用?? 一句話,擴(kuò)展原型方法,給大家一到面試題,數(shù)組去重自己體會下。
思路,判斷某個值出現(xiàn)的位置是否等于當(dāng)前循環(huán)的i, 比如, arr[1]的下標(biāo)是1,而arr.indexOf(arr[1])返回是0 說明 1在 i = 1的位置之前出現(xiàn)過了,所以重復(fù)。上代碼: var arr = [1,1,12,5,8,7,8,7,21,5,0,0]; var arr2 = []; for(var i = 0;i那么問題就來了 如何實現(xiàn)讓indexOf方法兼容低版本瀏覽器,這里就體現(xiàn)萬事萬物皆對象的好處了。
上代碼:
Array.prototype.indexOf=function(item){ for(var i=0;i有同學(xué)可能會想,不對啊,我們不講new關(guān)鍵字那些嗎?放心,這些下節(jié)課就講了。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/82668.html
摘要:面向過程函數(shù)式編程面向?qū)ο缶幊痰诙€并不是大家理解的那樣,我們先說舉個現(xiàn)實例子就明白了。多說一句函數(shù)是編程是非常強大也是我最喜歡的,以后再說,我們先說面向?qū)ο缶幊獭? 概述 當(dāng)大家已經(jīng)把js的語言基礎(chǔ)理解了,然后能夠?qū)懗鲆恍┖唵蔚睦恿?,這個時候基本上達(dá)到了一年工作經(jīng)驗的水平,而自己能夠獨立的寫一些小功能,完成一些小效果,或者臨摹修改一些比較復(fù)雜的插件的時候差不多就是兩年工作經(jīng)驗的水平,...
摘要:概述到這里我們講說面向?qū)ο蟮南盗胁糠值淖詈笠粋€課程,面向?qū)ο蟊仨氄莆諆蓚€東西一個是對象的創(chuàng)建一個是繼承。只需要記住一句話,屬性放在構(gòu)造函數(shù)里面,方法放在原型上。 概述 到這里我們講說js面向?qū)ο蟮南盗胁糠值淖詈笠粋€課程,面向?qū)ο蟊仨氄莆諆蓚€東西一個是對象的創(chuàng)建一個是繼承。這節(jié)課我們重點說說這兩個問題最后我們說下在ES6里面面向?qū)ο笤趺赐妗?1對象的創(chuàng)建 我們第一節(jié)課已經(jīng)就會用了,單體模...
摘要:原型鏈和構(gòu)造函數(shù)是一種面向?qū)ο蟮恼Z言,并且可以進(jìn)行原型繼承。來了極大的支持了工程化,它的標(biāo)準(zhǔn)讓瀏覽器內(nèi)部實現(xiàn)類和類的繼承構(gòu)造函數(shù)構(gòu)造函數(shù)調(diào)用父類構(gòu)造函數(shù)現(xiàn)在瀏覽器對其支持程度還不高。 原型鏈 原型鏈比作用域鏈要好理解的多。 JavaScript中的每個對象,都有一個內(nèi)置的_proto_屬性。這個屬性是編程不可見的(雖然ES6標(biāo)準(zhǔn)中開放了這個屬性,然而瀏覽器對這個屬性的可見性的支持不同)...
閱讀 1204·2021-11-15 18:00
閱讀 1799·2021-10-08 10:15
閱讀 763·2021-09-04 16:48
閱讀 2389·2021-09-04 16:48
閱讀 1322·2019-08-29 18:40
閱讀 976·2019-08-29 13:08
閱讀 2997·2019-08-26 14:06
閱讀 1119·2019-08-26 13:35