JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()


Posted in Javascript onAugust 11, 2016

首先了解枚举属性

一般利用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>并不是所有的属性都会在for~in遍历中显示。比如(数组的)length属性和constructor属性。那些已经被显示的属性被称为可枚举的,可以通过各个对象所提供的propertyIsEnumerable()方法来判断其中有哪些可枚举的属性;

<2>原型链中的各个属性也会被显示出来,前提是它们可枚举的,hasOwnProperty()来判断一个属性是对象自身属性还是原型属性;

<3>对于所有的原型属性,propertyIsEnumerable()都会返回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

注意:内建属性和方法大部分是不可枚举的

任何来自原型链中的属性也是不可枚举的

如果propertyIsEnumerable()的调用是来自原型链上的某个对象,那么该对象中的属性是可枚举的

newDog.constructor.prototype.propertyIsEnumerable('price');//true

isPrototypeOf():每个对象都有,表示当前对象是否是另一个对象的原型

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(),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JavaScript DOM 学习第七章 表单的扩展
Feb 19 Javascript
JS 有趣的eval优化输入验证实例代码
Sep 22 Javascript
jquery 3D 标签云示例代码
Jun 12 Javascript
jQuery中last()方法用法实例
Jan 06 Javascript
jQuery中extend函数的实现原理详解
Feb 03 Javascript
javascript实现框架高度随内容改变的方法
Jul 23 Javascript
js中window.open的参数及注意注意事项
Jul 06 Javascript
JS实现的适合做faq或menu滑动效果示例
Nov 17 Javascript
JS变量中有var定义和无var定义的区别以及es6中let命令和const命令
Feb 19 Javascript
jquery dataTable 获取某行数据
May 05 jQuery
angularjs路由传值$routeParams详解
Sep 05 Javascript
vue实现文章内容过长点击阅读全文功能的实例
Dec 28 Javascript
基于js对象,操作属性、方法详解
Aug 11 #Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
Aug 11 #Javascript
Node.js中防止错误导致的进程阻塞的方法
Aug 11 #Javascript
浅谈js中对象的使用
Aug 11 #Javascript
js倒计时简单实现代码
Aug 11 #Javascript
原生态js,鼠标按下后,经过了那些单元格的简单实例
Aug 11 #Javascript
vue分页组件table-pagebar使用实例解析
Nov 15 #Javascript
You might like
人族 TERRAN 概述
2020/03/14 星际争霸
PHP 文件类型判断代码
2009/03/13 PHP
深入密码加salt原理的分析
2013/06/06 PHP
js String对象中常用方法小结(字符串操作)
2012/01/27 Javascript
15条JavaScript最佳实践小结
2013/08/09 Javascript
JS 页面计时器示例代码
2013/10/28 Javascript
分享纯手写漂亮的表单验证
2015/11/19 Javascript
浅谈javascript中onbeforeunload与onunload事件
2015/12/10 Javascript
JS实现iframe自适应高度的方法示例
2017/01/07 Javascript
详解angularJs中自定义directive的数据交互
2017/01/13 Javascript
JQuery判断正整数整理小结
2017/08/21 jQuery
微信小程序实现收藏与取消收藏切换图片功能
2018/08/03 Javascript
Vue 实现列表动态添加和删除的两种方法小结
2018/09/07 Javascript
JS实现移动端点击按钮复制文本内容
2019/07/28 Javascript
JavaScript中数组去重的5种方法
2020/07/04 Javascript
JavaScript位置参数实现原理及过程解析
2020/09/14 Javascript
如何使用原生Js实现随机点名详解
2021/01/06 Javascript
[01:28]国服启动器接入蒸汽平台操作流程视频
2021/03/11 DOTA
python读写二进制文件的方法
2015/05/09 Python
[原创]windows下Anaconda的安装与配置正解(Anaconda入门教程)
2018/04/05 Python
Tensorflow使用tfrecord输入数据格式
2018/06/19 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
2020/03/06 Python
GDAL 矢量属性数据修改方式(python)
2020/03/10 Python
Python爬取微信小程序Charles实现过程图解
2020/09/29 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
2021/02/25 Python
澳大利亚个性化儿童礼品网站:Bright Star Kids
2019/06/14 全球购物
C++如何引用一个已经定义过的全局变量
2014/08/25 面试题
幼儿园家长会欢迎词
2014/01/09 职场文书
毕业自我评价
2014/02/05 职场文书
创建卫生先进单位实施方案
2014/03/10 职场文书
三万活动总结
2014/04/28 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书
请客吃饭开场白
2015/06/01 职场文书
初中语文教学研修日志
2015/11/13 职场文书
2016年妇联“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
一次Mysql update sql不当引起的生产故障记录
2022/04/01 MySQL