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 相关文章推荐
jQuery 使用手册(四)
Sep 23 Javascript
javascript 语法基础 想学习js的朋友可以看看
Dec 16 Javascript
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
Nov 14 Javascript
浅析JavaScript动画
Jun 10 Javascript
谈谈JavaScript自定义回调函数
Oct 18 Javascript
AngularJS  $modal弹出框实例代码
Aug 24 Javascript
JavaScript中apply方法的应用技巧小结
Sep 29 Javascript
jquery对所有input type=text的控件赋值实现方法
Dec 02 Javascript
JS异步文件分片断点上传的实现思路
Dec 25 Javascript
jQuery仿写百度百科的目录树
Jan 03 Javascript
Vue项目中数据的深度监听或对象属性的监听实例
Jul 17 Javascript
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
Apr 06 Vue.js
基于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 使用redis简单示例分享
2015/03/05 PHP
常用PHP数组排序函数归纳
2016/08/08 PHP
如何在Laravel之外使用illuminate组件详解
2020/09/20 PHP
让JavaScript 轻松支持函数重载 (Part 1 - 设计)
2009/08/04 Javascript
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
2010/06/25 Javascript
从零开始学习jQuery (四) jQuery中操作元素的属性与样式
2011/02/23 Javascript
jquery radio 操作代码
2011/03/16 Javascript
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
2011/11/15 Javascript
非常有用的40款jQuery 插件推荐(系列二)
2011/12/25 Javascript
10款非常有用的 Ajax 插件分享
2012/03/14 Javascript
jquery中对于批量deferred的处理方法
2014/01/22 Javascript
原生JS简单实现ajax的方法示例
2016/11/29 Javascript
jquery广告无缝轮播实例
2017/01/05 Javascript
微信小程序 登陆流程详细介绍
2017/01/17 Javascript
微信小程序 动画的简单实例
2017/10/12 Javascript
vue移动端实现红包雨效果
2020/06/23 Javascript
利用python脚本如何简化jar操作命令
2019/02/24 Python
5款Python程序员高频使用开发工具推荐
2019/04/10 Python
python登录WeChat 实现自动回复实例详解
2019/05/28 Python
Python定时任务工具之APScheduler使用方式
2019/07/24 Python
PyTorch安装与基本使用详解
2020/08/31 Python
pycharm 快速解决python代码冲突的问题
2021/01/15 Python
python中四舍五入的正确打开方式
2021/01/18 Python
使用layui框架实现点击左侧导航切换右侧内容且右侧选项卡跟随变化的效果
2020/11/10 HTML / CSS
英国时尚优质的女装:Hope Fashion
2018/08/14 全球购物
传播学毕业生求职信
2013/10/11 职场文书
采购文员岗位职责
2013/11/20 职场文书
中专毕业生的自我鉴定
2013/12/01 职场文书
批评与自我批评范文
2014/10/15 职场文书
2014年电工工作总结
2014/11/20 职场文书
2014年个人工作总结报告
2014/11/27 职场文书
小学班主任工作总结2015
2015/04/07 职场文书
就业指导讲座心得体会
2016/01/15 职场文书
CSS3实现的侧滑菜单
2021/04/27 HTML / CSS
教你怎么用python实现字符串转日期
2021/05/24 Python
JavaScript小技巧带你提升你的代码技能
2021/09/15 Javascript