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编程起步(第七课)
Jan 10 Javascript
javascript类继承机制的原理分析
Sep 12 Javascript
调用innerHTML之后onclick失效问题的解决方法
Jan 28 Javascript
JS实现重新加载当前页面或者父页面的几种方法
Nov 30 Javascript
微信小程序支付及退款流程详解
Nov 30 Javascript
微信小程序数据存储与取值详解
Jan 30 Javascript
浅谈实现vue2.0响应式的基本思路
Feb 13 Javascript
vue click.stop阻止点击事件继续传播的方法
Sep 04 Javascript
微信小程序new Date()方法失效问题解决方法
Jul 29 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
Nov 15 Javascript
JavaScript onclick事件使用方法详解
May 15 Javascript
uni-app使用countdown插件实现倒计时
Nov 01 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
打造计数器DIY三步曲(上)
2006/10/09 PHP
用PHP中的 == 运算符进行字符串比较
2006/11/26 PHP
php 什么是PEAR?
2009/03/19 PHP
php的urlencode()URL编码函数浅析
2011/08/09 PHP
php读取mysql乱码,用set names XXX解决的原理分享
2011/12/29 PHP
PHP编码转换
2012/11/05 PHP
基于jQuery实现模拟页面加载进度条
2013/04/01 Javascript
基于jquery的has()方法以及与find()方法以及filter()方法的区别详解
2013/04/26 Javascript
js setTimeout 常见问题小结
2013/08/13 Javascript
js 与 php 通过json数据进行通讯示例
2014/03/26 Javascript
jQuery中extend函数详解
2015/02/13 Javascript
javascript this详细介绍
2016/09/19 Javascript
jQuery编写网页版2048小游戏
2017/01/06 Javascript
微信小程序开发入门基础教程
2017/04/19 Javascript
js 只比较时间大小的实例
2017/10/26 Javascript
浅谈vue2 单页面如何设置网页title
2017/11/08 Javascript
微信小程序实现tab和swiper切换结合效果
2020/07/17 Javascript
nodejs语言实现验证码生成功能的示例代码
2019/10/13 NodeJs
Element Dialog对话框的使用示例
2020/07/26 Javascript
pycharm 使用心得(二)设置字体大小
2014/06/05 Python
Python Queue模块详解
2014/11/30 Python
Python操作串口的方法
2015/06/17 Python
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
2016/06/18 Python
详解python的数字类型变量与其方法
2016/11/20 Python
python进程和线程用法知识点总结
2019/05/28 Python
python设置代理和添加镜像源的方法
2020/02/14 Python
Python爬取酷狗MP3音频的步骤
2021/02/26 Python
面向对象编程的优势是什么
2015/12/17 面试题
《每逢佳节倍思亲》教后反思
2014/04/19 职场文书
班级标语大全
2014/06/21 职场文书
电子商务优秀毕业生求职信
2014/07/11 职场文书
英语邀请函范文
2015/02/02 职场文书
某药房的新员工入职告知书!
2019/07/15 职场文书
Mac M1安装mnmp (Mac+Nginx+MySQL+PHP) 开发环境
2021/03/29 PHP
MySQL数据库 任意ip连接方法
2022/05/20 MySQL
Django框架中视图的用法
2022/06/10 Python