博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
遍历对象实例的属性和方法
阅读量:6260 次
发布时间:2019-06-22

本文共 1240 字,大约阅读时间需要 4 分钟。

前言

遍历对象实例的方法有3种,1.通过for in,2通过Object.keys方法,3.通过Object,getOwnPropertyNames

这三种方式默认不可枚举的所有属性和方法,包括:hasOwnProperty()、propertyIsEnumerable()、toLocaleString()、toString()和valueOf()。ECMAScript5也将constructor和prototype属性的[[Enumerable]]特性设置为false,但并不是所有浏览器都照此实现。

class Person {  constructor(){    this.name = ""    this.age = 0  }  sayName(){    console.log('sayName')  }}var o1 = new Person()/*3种写法,都输出name,age没有输出sayName,constructor*///第1种方式for(var prop in o1){  console.log(prop)}//第2种方式console.log(Object.keys(o1))//第3种方式console.log(Object.getOwnPropertyNames(o1))复制代码

我们希望能输出对象实例的所有属性和原型的方法需要依靠Object.getOwnPropertyNames

function getOwnPropertyNames(obj){  return [...Object.getOwnPropertyNames(Object.getPrototypeOf(obj)),...Object.getOwnPropertyNames(obj)];}console.log(getOwnPropertyNames(o1))复制代码

另外

1.Object.hasOwnProperty只能用作判断实例是否包含属性和方法,而无法判断原型是否包含
2.in操作可以判断实例和元素是否包含属性和方法

var o1 = new Person()console.log(o1.hasOwnProperty('name')) // trueconsole.log(o1.hasOwnProperty('sayName')) // falseconsole.log('name' in o1) //trueconsole.log('sayName' in o1) //true复制代码

从而可以定义一个判断原型是否包含属性和方法的方法

function hasPrototypeProperty(obj, name){  return !obj.hasOwnProperty(name) && name in obj;}复制代码

转载于:https://juejin.im/post/5b65cecf518825311504954c

你可能感兴趣的文章
网站攻击中的csrf和xss
查看>>
(CZ深入浅出Java基础)反射
查看>>
图像颜色提取
查看>>
20170626-Promise的实现
查看>>
jQuery webcam plugin调用摄像头
查看>>
Vue入门笔记
查看>>
bash脚本case与函数
查看>>
我的学习计划
查看>>
理解 Go 语言中的方法和接收者
查看>>
iView 发布 2.0.0-rc.16 版本
查看>>
React表单组件
查看>>
从0到1学习node(八)之异步控制工具async
查看>>
Android 运行时权限库
查看>>
网易漫画Swift混编实践
查看>>
如何针对业务设计架构?——QCon热点专题前瞻
查看>>
你的可用性达标了吗?云端业务性能高可用的深度实践
查看>>
Mozilla开发全新的公开网络API WebXR 来实现增强现实
查看>>
用户超5亿,三年投10亿,开发者如何抢滩支付宝小程序蓝海?
查看>>
[使用 Weex 和 Vue 开发原生应用] 2 编写独立页面
查看>>
Cosmos DB:全球分布式数据库
查看>>