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 相关文章推荐
许愿墙中用到的函数
Oct 07 Javascript
JavaScript 事件属性绑定带参数的函数
Mar 13 Javascript
Javascript无参数和有参数类继承问题解决方法
Mar 02 Javascript
JQuery使用index方法获取Jquery对象数组下标的方法
May 18 Javascript
js判断移动端是否安装某款app的多种方法
Dec 18 Javascript
ASP.NET jquery ajax传递参数的实例
Nov 02 Javascript
微信小程序 devtool隐藏的秘密
Jan 21 Javascript
ES6新特性之解构、参数、模块和记号用法示例
Apr 01 Javascript
vue-infinite-loading2.0 中文文档详解
Apr 08 Javascript
改变layer confirm弹窗按钮的颜色方法
Sep 12 Javascript
vue选项卡切换登录方式小案例
Sep 27 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
Feb 03 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 之 没有mysql支持时的替代方案
2006/10/09 PHP
php中通过虚代理实现延迟加载的实现代码
2011/06/10 PHP
PHP 第二节 数据类型之数组
2012/04/28 PHP
PHP实现的分解质因数操作示例
2018/08/01 PHP
javascript的trim,ltrim,rtrim自定义函数
2008/09/21 Javascript
jquery 事件对象属性小结
2010/04/27 Javascript
当jQuery遭遇CoffeeScript的时候 使用分享
2011/09/17 Javascript
jquery1.83 之前所有与异步列队相关的模块详细介绍
2012/11/13 Javascript
jQuery命名空间与闭包用法示例
2017/01/12 Javascript
ajax接收后台数据在html页面显示
2017/02/19 Javascript
使用vue-cli(vue脚手架)快速搭建项目的方法
2018/05/21 Javascript
JS实现随机生成10个手机号的方法示例
2018/12/07 Javascript
微信小程序五子棋游戏的悔棋实现方法【附demo源码下载】
2019/02/20 Javascript
基于vue通用表单解决方案的思考与分析
2019/03/16 Javascript
javascript+Canvas实现画板功能
2020/06/23 Javascript
el-form 多层级表单的实现示例
2020/09/10 Javascript
[02:08]2014DOTA2国际邀请赛 430专访:力争取得小组前二
2014/07/11 DOTA
Python自动重试HTTP连接装饰器
2015/04/28 Python
Python requests库用法实例详解
2018/08/14 Python
Django集成CAS单点登录的方法示例
2019/06/10 Python
简单了解Django ContentType内置组件
2019/07/23 Python
Python产生一个数值范围内的不重复的随机数的实现方法
2019/08/21 Python
python解析yaml文件过程详解
2019/08/30 Python
python装饰器使用实例详解
2019/12/14 Python
Xadmin+rules实现多选行权限方式(级联效果)
2020/04/07 Python
pip 20.3 新版本发布!即将抛弃 Python 2.x(推荐)
2020/12/16 Python
HTML5 直播疯狂点赞动画实现代码 附源码
2020/04/14 HTML / CSS
bonprix匈牙利:女士、男士和儿童服装
2019/07/19 全球购物
证婚人经典证婚词
2014/01/09 职场文书
关于安全的标语
2014/06/10 职场文书
爬山的活动方案
2014/08/16 职场文书
2015年先进个人自荐书
2015/03/24 职场文书
2015年安全工作总结范文
2015/04/02 职场文书
上市公司董事长岗位职责
2015/04/16 职场文书
新闻稿标题
2015/07/18 职场文书
pandas:get_dummies()与pd.factorize()的用法及区别说明
2021/05/21 Python