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 相关文章推荐
prototype 源码中文说明之 prototype.js
Sep 22 Javascript
Mootools 1.2教程 定时器和哈希简介
Sep 15 Javascript
JS图片无缝滚动(简单利于使用)
Jun 17 Javascript
JS自动适应的图片弹窗实例
Jun 29 Javascript
js中split和replace的用法实例
Feb 28 Javascript
js省市联动效果完整实例代码
Dec 09 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
Sep 29 Javascript
JS获取html元素的标记名实现方法
Oct 08 Javascript
weex slider实现滑动底部导航功能
Aug 28 Javascript
微信小程序实现单选功能
Oct 30 Javascript
详解JS深拷贝与浅拷贝
Aug 04 Javascript
react的hooks的用法详解
Oct 12 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数据饼图效果实现代码
2011/11/23 PHP
PHP下的Oracle客户端扩展(OCI8)安装教程
2014/09/10 PHP
PHP保留两位小数的几种方法
2019/07/24 PHP
jQuery EasyUI API 中文文档 - Menu菜单
2011/10/03 Javascript
让AJAX不依赖后端接口实现方案
2012/12/03 Javascript
jquery中prop()方法和attr()方法的区别浅析
2013/09/06 Javascript
点击页面其它地方隐藏该div的两种思路
2013/11/18 Javascript
js常用数组操作方法简明总结
2014/06/20 Javascript
JS判断图片是否加载完成方法汇总(最新版)
2016/05/13 Javascript
jQuery如何解决IE输入框不能输入的问题
2016/10/08 Javascript
关于JavaScript中事件绑定的方法总结
2016/10/26 Javascript
JavaScript数据结构之二叉树的删除算法示例
2017/04/13 Javascript
详解Vue 动态添加模板的几种方法
2017/04/25 Javascript
Javascript循环删除数组中元素的几种方法示例
2017/05/18 Javascript
vue引入swiper插件的使用实例
2017/07/19 Javascript
jQuery实现简单的计时器功能实例分析
2017/08/29 jQuery
jQuery选择器中的特殊符号处理方法
2017/09/08 jQuery
详解vue-router 路由元信息
2017/09/13 Javascript
基于PHP pthreads实现多线程代码实例
2020/06/24 Javascript
原生js canvas实现鼠标跟随效果
2020/08/02 Javascript
[04:10]2016国际邀请赛中国区预选赛第二日TOP10精彩集锦
2016/06/28 DOTA
Python实现扫描局域网活动ip(扫描在线电脑)
2015/04/28 Python
python变量赋值方法(可变与不可变)
2019/01/12 Python
react+django清除浏览器缓存的几种方法小结
2019/07/17 Python
Pycharm 2020年最新激活码(亲测有效)
2020/09/18 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
2020/02/26 Python
在css3中background-clip属性与background-origin属性的用法介绍
2012/11/13 HTML / CSS
CSS3之多背景background使用示例
2013/10/18 HTML / CSS
纯css实现照片墙3D效果的示例代码
2017/11/13 HTML / CSS
阿联酋手表和配饰购物网站:Rivolishop
2019/11/25 全球购物
局部内部类是否可以访问非final变量?
2013/04/20 面试题
编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串
2014/01/07 面试题
领导班子党的群众路线教育实践活动对照检查材料
2014/09/25 职场文书
员工表扬信怎么写
2015/05/05 职场文书
小学语文教学反思范文
2016/03/03 职场文书
MySql 8.0及对应驱动包匹配的注意点说明
2021/06/23 MySQL