您好,登錄后才能下訂單哦!
這篇文章主要介紹了js中原型鏈、閉包四種作用、繼承、命名空間、枚舉類型的案例分析,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。
原型鏈
JavaScript 對象是動(dòng)態(tài)的屬性“包”(指其自己的屬性)。JavaScript 對象有一個(gè)指向一個(gè)原型對象的鏈。當(dāng)試圖訪問一個(gè)對象的屬性時(shí),它不僅僅在該對象上搜尋,還會(huì)搜尋該對象的原型,以及該對象的原型的原型,依次層層向上搜索,直到找到一個(gè)名字匹配的屬性或到達(dá)原型鏈的末尾。
在不影響origin的原型鏈的前提下,創(chuàng)建一個(gè)target復(fù)制origin的原型鏈
var inherit = (function(){ var F = function (){}; return function (Target, Origin){ F.prototype = Origin.prototype; Target.prototype = new F(); Target.prototype.constructor = Target; //目標(biāo)函數(shù)的原型的構(gòu)造函數(shù)定義為目標(biāo)函數(shù) Target.prototype.uber = Origin.prototype; //uber超類,指的是目標(biāo)函數(shù)的最終原型為Orign的原型 } }())
繼承
一般公司常用立即執(zhí)行函數(shù)寫功能,而且調(diào)用一個(gè)init()初始化函數(shù)
代碼中的callname()中的call作用是改變this指針,將name的this指向改為當(dāng)前函數(shù)下的this
注意的是要用return返回函數(shù)
<script> var init=(function(){ var name ='辣雞'; function callname(){ console.log(name); } return function(){ callname(); } }()) init(); </script>
枚舉:
var org={ name:'智障', sex:'男', height:178 } for ( var proto in org ){ console.log(org.proto) }
這樣子會(huì)打印三次undefined,因?yàn)榇藭r(shí)會(huì)把proto當(dāng)成對象的某個(gè)屬性,要把代碼中的org.proto改為org[proto],否則會(huì)默認(rèn)理解為org['proto']。
正常輸出如下,打印出三個(gè)值,若想打印屬性,則直接console.log(proto)
對象的枚舉,三種方法:
for in -----> 1.instanceof 2.hasOwnProperty 3. in
1、instance of
A instance of B
判斷A對象是不是B的構(gòu)造函數(shù)構(gòu)造出來的
function Person(){} var person = new Person();
所以識(shí)別數(shù)組和對象的方法------->1. instanceof 2. to String call 3.constructor
1)var obj={}
2)toString call
3)constructor
var obj = {}
看A對象的原型鏈上有沒有B的原型
2、hasOwnProperty,判斷是否屬于自己的方法,可以排除原型的方法__proto__
var org={ name:'智障', sex:'男', height:178, __proto__:{ lastName:'zhang' } }for(var prop in org){ if(org.hasOwnProperty( prop )){ console.log(prop) } }var obj={};
3、in
in 和 hasOwnProperty 情況類型,但是原型中的方法也存在方法列舉中
當(dāng)內(nèi)部函數(shù)被保存在外部時(shí),會(huì)生成閉包函數(shù),閉包會(huì)導(dǎo)致原有作用域鏈不釋放,造成內(nèi)存泄漏
閉包四種作用:
1.實(shí)現(xiàn)公有變量 eg:累加器
2.可以做緩存(存儲(chǔ)結(jié)構(gòu))
3.實(shí)現(xiàn)封裝,屬性私有化
4.模塊化開發(fā),防止污染全局變量(圣杯模式)
/用閉包來定義公共函數(shù),并令其可以訪問私有函數(shù)和變量。這個(gè)方式也稱為 模塊模式(module pattern)(圣杯模式)
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享js中原型鏈、閉包四種作用、繼承、命名空間、枚舉類型的案例分析內(nèi)容對大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,遇到問題就找億速云,詳細(xì)的解決方法等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。