JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
首先了解枚舉屬性
一般利用for~in遍歷
var a = [1,2,3]; for(var i in a){ console.log(a[i]); } or var o = {p1:1,p2:2}; for(var i in o){ console.log(i+'='+o[i]); }//p1=1;p2=2;
<1>并不是所有的屬性都會(huì)在for~in遍歷中顯示。比如(數(shù)組的)length屬性和constructor屬性。那些已經(jīng)被顯示的屬性被稱為可枚舉的,可以通過各個(gè)對(duì)象所提供的propertyIsEnumerable()方法來判斷其中有哪些可枚舉的屬性;
<2>原型鏈中的各個(gè)屬性也會(huì)被顯示出來,前提是它們可枚舉的,hasOwnProperty()來判斷一個(gè)屬性是對(duì)象自身屬性還是原型屬性;
<3>對(duì)于所有的原型屬性,propertyIsEnumerable()都會(huì)返回false,包括那些在for~in遍歷中可枚舉的屬性。
js代碼示例
function dog(name,color){ this.name = name; this.color = color; this.someMethod = function(){return 1;} } dog.prototype.price=100; dog.prototype.rating=3; var newDog = new dog("doggg","yellow"); for(var prop in newDog){ console.log(prop+'='+newDog[prop]); } //name=doggg //color=yellow //someMethod=function (){return 1;} //price=100 //rating=3 newDog.hasOwnProperty('name');//true; newDog.hasOwnProperty('price');//false;
只顯示自身屬性
for(var prop in newDog){ if(newDog.hasOwnProperty(prop )){ console.log(prop+'='+newDog[prop]); } } newDog.propertyIsEnumerable('name');//true newDog.propertyIsEnumerable('constructor');//false
注意:內(nèi)建屬性和方法大部分是不可枚舉的
任何來自原型鏈中的屬性也是不可枚舉的
如果propertyIsEnumerable()的調(diào)用是來自原型鏈上的某個(gè)對(duì)象,那么該對(duì)象中的屬性是可枚舉的
newDog.constructor.prototype.propertyIsEnumerable('price');//true
isPrototypeOf():每個(gè)對(duì)象都有,表示當(dāng)前對(duì)象是否是另一個(gè)對(duì)象的原型
js代碼示例
var monkey = { hair:true, feeds:'bananas', breathes:'air' }; function Human(name){ this.name = name; } Human.prototype = monkey; var george = new Human('George'); monkey.isPrototypeOf(george);//true
以上所述是小編給大家介紹的JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf(),希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
微信小程序WebSocket實(shí)現(xiàn)聊天對(duì)話功能
這篇文章主要為大家詳細(xì)介紹了微信小程序WebSocket實(shí)現(xiàn)聊天對(duì)話功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07利用JavaScript實(shí)現(xiàn)網(wǎng)頁版2048小游戲
這篇文章主要介紹了如何利用HTML+CSS+JS編寫一個(gè)網(wǎng)頁版的2048小游戲,代碼簡(jiǎn)單易懂對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-11-11ajax接收后臺(tái)數(shù)據(jù)在html頁面顯示
本篇文章主要介紹了ajax接收后臺(tái)數(shù)據(jù)在html頁面顯示的方法,具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-02-02JS實(shí)現(xiàn)的仿東京商城菜單、仿Win右鍵菜單及仿淘寶TAB特效合集
這篇文章主要介紹了JS實(shí)現(xiàn)的仿東京商城菜單、仿Win右鍵菜單及仿淘寶TAB特效合集,以實(shí)例形式較為詳細(xì)的分析了JavaScript實(shí)現(xiàn)動(dòng)態(tài)添加下拉菜單及響應(yīng)鼠標(biāo)事件生成菜單等實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-09-09一些常用且實(shí)用的原生JavaScript函數(shù)
日常開始中常用到的一些原生JavaScript函數(shù),比較實(shí)用, 今天特地整理一下,分享給大家,希望對(duì)大家有用,會(huì)常更新,同時(shí)也歡迎大家補(bǔ)充.2010-09-09IE6下javasc#ipt:void(0) 無效的解決方法
本篇文章主要是對(duì)IE6下javasc#ipt:void(0) 無效的解決方法進(jìn)行了介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-12-12js監(jiān)聽輸入框值的即時(shí)變化onpropertychange、oninput
很多情況下我們都會(huì)即時(shí)監(jiān)聽輸入框值的變化,以便作出即時(shí)動(dòng)作去引導(dǎo)瀏覽者增強(qiáng)網(wǎng)站的用戶體驗(yàn)感。2011-07-07