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 相关文章推荐
js 匿名调用实现代码
Jun 19 Javascript
jquery.boxy插件的iframe扩展代码
Jul 02 Javascript
jquery加载图片时以淡入方式显示的方法
Jan 14 Javascript
Node.js检测端口(port)是否被占用的简单示例
Sep 29 Javascript
阿里云ecs服务器中安装部署node.js的步骤
Oct 08 Javascript
JavaScript获取URL中参数querystring的方法详解
Oct 11 Javascript
JS控件bootstrap datepicker使用方法详解
Mar 25 Javascript
微信小程序 密码输入(源码下载)
Jun 27 Javascript
JS 60秒后重新发送验证码的实例讲解
Jul 26 Javascript
javascript 缓冲运动框架的实现
Sep 29 Javascript
详解HTML5 使用video标签实现选择摄像头功能
Oct 25 Javascript
vue工程全局设置ajax的等待动效的方法
Feb 22 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
PHP开发需要注意的安全问题
2010/09/01 PHP
从php核心代码分析require和include的区别
2011/01/02 PHP
Php header()函数语法及使用代码
2013/11/04 PHP
PHP Curl多线程原理实例详解
2013/11/06 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
2016/05/17 PHP
Yii2中使用asset压缩js,css文件的方法
2016/11/24 PHP
javascript中利用数组实现的循环队列代码
2010/01/24 Javascript
javascript 用记忆函数快速计算递归函数
2010/03/15 Javascript
用javascript添加控件自定义属性解析
2013/11/25 Javascript
Extjs4中tree的拖拽功能(可以两棵树之间拖拽) 简单实例
2013/12/08 Javascript
返回上一页并自动刷新的JavaScript代码
2014/02/19 Javascript
详解JavaScript中数组和字符串的lastIndexOf()方法使用
2016/03/13 Javascript
全面理解JavaScript中的继承(必看)
2016/06/16 Javascript
基于Vue的文字跑马灯组件(npm 组件包)
2017/05/24 Javascript
JavaScript对象_动力节点Java学院整理
2017/06/23 Javascript
微信小程序实现自定义加载图标功能
2018/07/19 Javascript
浅谈vue方法内的方法使用this的问题
2018/09/15 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
2019/09/27 Javascript
uin-app+mockjs实现本地数据模拟
2020/08/26 Javascript
javascript自定义加载loading效果
2020/09/15 Javascript
python自动化测试之setUp与tearDown实例
2014/09/28 Python
Python使用迭代器捕获Generator返回值的方法
2017/04/05 Python
使用python 爬虫抓站的一些技巧总结
2018/01/10 Python
python实现csv格式文件转为asc格式文件的方法
2018/03/23 Python
python opencv人脸检测提取及保存方法
2018/08/03 Python
Django模型序列化返回自然主键值示例代码
2019/06/12 Python
Python定时任务随机时间执行的实现方法
2019/08/14 Python
Python笔记之代理模式
2019/11/20 Python
Pandas —— resample()重采样和asfreq()频度转换方式
2020/02/26 Python
使用python接受tgam的脑波数据实例
2020/04/09 Python
美国最古老的精致书写工具制造商:A.T. Cross(高仕)
2018/01/30 全球购物
东南亚排名第一的服务市场:kaodim
2019/03/28 全球购物
在职研究生自我鉴定
2013/10/16 职场文书
中药学专业求职信
2014/05/31 职场文书
农村门前三包责任书
2014/07/25 职场文书
2016年幼儿园教研活动总结
2016/04/05 职场文书