講原型和原型鏈,如果是講定義,那很是晦澀難懂,今天我們就通俗易懂的說說原型與原型鏈。還需要借助阮老師的“Javascript繼承機(jī)制的設(shè)計(jì)思想”。
創(chuàng)新互聯(lián)專注于欒城網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供欒城營銷型網(wǎng)站建設(shè),欒城網(wǎng)站制作、欒城網(wǎng)頁設(shè)計(jì)、欒城網(wǎng)站官網(wǎng)定制、小程序定制開發(fā)服務(wù),打造欒城網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供欒城網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
1,比如我們還要針對學(xué)生統(tǒng)計(jì)每個(gè)人的總分是多少,我們改造構(gòu)造函數(shù)Person,構(gòu)造函數(shù)上有個(gè) prototype屬性,這個(gè)屬性就是這個(gè)構(gòu)造函數(shù)的原型(顯式原型),這個(gè)原型是函數(shù)特有,prototype對象默認(rèn)有兩個(gè)屬性,constructor屬性和__proto__屬性。
2,constructor,這個(gè)屬性包含了一個(gè)指針,指回原構(gòu)造函數(shù)。通過控制臺(tái)輸出,我們可以看到我們實(shí)例化的對象,有個(gè)__proto__屬性,這個(gè)屬性就是隱式原型,這個(gè)__proto__是所有對象都有的屬性。
3,由于JavaScript的一切都是對象(除undefined),又由于所有對象都有__proto__屬性,__proto__又指向構(gòu)造函數(shù)的prototype,當(dāng)我們訪問一個(gè)對象的屬性時(shí)。
4,如果這個(gè)對象內(nèi)部不存在這個(gè)屬性,那么他就會(huì)去__proto__里找這個(gè)屬性,這個(gè)__proto__又會(huì)有自己的__proto__,于是就這樣 一直找下去,也就是我們平時(shí)所說的原型鏈的概念。原型鏈,說明是鏈?zhǔn)剑皇黔h(huán),說明有終點(diǎn),它的終點(diǎn)是null。
//如果我定義如下一個(gè)對象
var?a?=?{
fun1?:?function(){
console.log("fun1");
return?a;
},
fun2?:?function(){
console.log("fun2");
return?a;
},
fun3?:?function(){
console.log("fun3");
return?a;????
}
}
那么,我調(diào)用的時(shí)候就可以鏈?zhǔn)秸{(diào)用了
a.fun1().fun2().fun3();
可選鏈 操作符( ?. )允許讀取位于連接對象鏈深處的屬性的值,而不必明確驗(yàn)證鏈中的每個(gè)引用是否有效。 ?. 操作符的功能類似于 . 鏈?zhǔn)讲僮鞣煌幵谟冢谝脼榭? nullish ) ( null 或者 undefined ) 的情況下不會(huì)引起錯(cuò)誤,該表達(dá)式短路返回值是 undefined 。與函數(shù)調(diào)用一起使用時(shí),如果給定的函數(shù)不存在,則返回 undefined 。
當(dāng)嘗試訪問可能不存在的對象屬性時(shí),可選鏈操作符將會(huì)使表達(dá)式更短、更簡明。在探索一個(gè)對象的內(nèi)容時(shí),如果不能確定哪些屬性必定存在,可選鏈操作符也是很有幫助的。
為了避免報(bào)錯(cuò),在訪問obj.first.second之前,要保證 obj.first 的值既不是 null,也不是 undefined。如果只是直接訪問 obj.first.second,而不對 obj.first 進(jìn)行校驗(yàn),則有可能拋出錯(cuò)誤。
有了可選鏈操作符(?.),在訪問 obj.first.second 之前,不再需要明確地校驗(yàn) obj.first 的狀態(tài),再并用短路計(jì)算獲取最終結(jié)果:
摘自: 可選鏈操作符
function?Person(){
this.type?=?'person';
this.say?=function(msg){
console.log('person?say:'+msg);
return?this;????????????????//?這行是關(guān)鍵,需要返回此實(shí)例對象,因此執(zhí)行此方法后返回實(shí)例對象,所以可以直接調(diào)用實(shí)例對象上的方法,即為鏈?zhǔn)叫?yīng)
}
}
var?p?=?new?Person();
//鏈?zhǔn)秸{(diào)用
p.say('hello').say('world').say('so?easy')
標(biāo)題名稱:javascript鏈?zhǔn)降暮唵谓榻B
地址分享:http://vcdvsql.cn/article20/dsdiojo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、網(wǎng)站收錄、ChatGPT、品牌網(wǎng)站制作、做網(wǎng)站、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)