JavaScript检测实例属性, 原型属性


Posted in Javascript onFebruary 04, 2015

0.前提

JavaScript对象的属性分为两种存在形态. 一种是存在实例中, 另一是存在原型对象中.

根据上述, 检测属性的时候会出现4种情况

既不存在实例中, 也不存在原型对象中
存在实例中, 不存在原型对象中
不存在实例中, 存在原型对象中
既存在实例中, 也存在原型对象中

1.hasOwnPrototype()

hasOwnPrototype()接受一个字符串格式的属性名称, 如果实例本身存在该属性(情况2/情况4), 返回true. 否则, 返回false(情况1/情况3).

functino Person() {}

Person.prototype.name = 'apple';

var person1 = new Person();

var person2 = new Person();

person1.name = 'banana';

console.log(person1.hasOwnPrototype(name));  //true

console.log(person2.hasOwnPrototype(name));  //false

2.in操作符

in操作符无论属性是存在实例本身中, 还是原型对象中, 就会返回true(情况2/情况3/情况4); 否则, 返回false(情况1).

console.log('name' in person1);  //true

console.log('name' in person2);  //true

3.检测存在原型的属性

结合in操作符和hasOwnProperty()就可以自定义函数来检测原型中是否存在给定的属性.

function hasPrototypeProperty(object, name) {

     return !object.hasOwnPrototype(name) && (name in object);

}

console.log(hasPrototypeProperty(person1, 'name')); //false

console.log(hasPrototypeProperty(person2, 'name')); //true

原型中存在给定属性, 返回true(情况3). 否则返回false(情况1/情况2/情况4).

以上就是本文的全部内容了,希望大家能够喜欢

Javascript 相关文章推荐
基于Jquery的表格隔行换色,移动换色,点击换色插件
Dec 22 Javascript
javascript复制对象使用说明
Jun 28 Javascript
调试Node.JS的辅助工具(NodeWatcher)
Jan 04 Javascript
node.js中的path.normalize方法使用说明
Dec 08 Javascript
jQuery实现在列表的首行添加数据
May 19 Javascript
jQuery实现带有洗牌效果的动画分页实例
Aug 31 Javascript
js实现导航栏中英文切换效果
Jan 16 Javascript
js实现下拉框效果(select)
Mar 28 Javascript
深入研究React中setState源码
Nov 17 Javascript
layui 实现二级弹窗弹出之后 关闭一级弹窗的方法
Sep 18 Javascript
vuex存储token示例
Nov 11 Javascript
小程序外卖订单界面的示例代码
Dec 30 Javascript
Jquery Ajax xmlhttp请求成功问题
Feb 04 #Javascript
js对字符的验证方法汇总
Feb 04 #Javascript
AngularJS内置指令
Feb 04 #Javascript
javascript内置对象操作详解
Feb 04 #Javascript
js判断文本框剩余可输入字数的方法
Feb 04 #Javascript
javascript 兼容各个浏览器的事件
Feb 04 #Javascript
浅谈js中变量初始化
Feb 03 #Javascript
You might like
关于php内存不够用的快速解决方法
2013/10/26 PHP
php字符编码转换之gb2312转为utf8
2013/10/28 PHP
PHP中include()与require()的区别说明
2017/02/14 PHP
详解php命令注入攻击
2019/04/06 PHP
javascript提取URL的搜索字符串中的参数(自定义函数实现)
2013/01/22 Javascript
用JavaScript实现动画效果的方法
2013/07/20 Javascript
js中的前绑定和后绑定详解
2013/08/01 Javascript
js 跳出页面的frameset框架示例介绍
2013/12/23 Javascript
jQuery实现视频作为全屏幕背景
2014/12/18 Javascript
javascript面向对象之共享成员属性与方法及prototype关键字用法
2015/01/13 Javascript
浅谈Javascript数组的使用
2015/07/29 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(基于jquery)
2015/11/18 Javascript
微信小程序 获取相册照片实例详解
2016/11/16 Javascript
Bootstrap基本插件学习笔记之Tooltip提示工具(18)
2016/12/08 Javascript
AngularJS实现页面定时刷新
2017/03/14 Javascript
JavaScript简单拖拽效果(1)
2017/05/17 Javascript
jQuery+ajax实现局部刷新的两种方法
2017/06/08 jQuery
微信小程序左右滑动的实现代码
2017/12/15 Javascript
Vue Promise的axios请求封装详解
2018/08/13 Javascript
微信小程序实现滑动翻页效果(完整代码)
2019/12/06 Javascript
Vue 实现v-for循环的时候更改 class的样式名称
2020/07/17 Javascript
[05:09]第二届DOTA2亚洲邀请赛决赛日比赛集锦:iG 3:0 OG夺冠
2017/04/05 DOTA
[02:12]2019完美世界全国高校联赛(春季赛)报名开启
2019/03/01 DOTA
教你如何在Django 1.6中正确使用 Signal
2014/06/22 Python
Python利用matplotlib生成图片背景及图例透明的效果
2017/04/27 Python
python+opencv+caffe+摄像头做目标检测的实例代码
2018/08/03 Python
python 类之间的参数传递方式
2019/12/20 Python
pytorch实现对输入超过三通道的数据进行训练
2020/01/15 Python
如何在python中处理配置文件代码实例
2020/09/27 Python
基于python+selenium自动健康打卡的实现代码
2021/01/13 Python
美国家居用品和厨具购物网站:DealsDot
2019/10/07 全球购物
英国第一职业高尔夫商店:Clickgolf.co.uk
2020/11/18 全球购物
如何开发一个JQuery插件
2016/07/28 面试题
老教师工作总结的自我评价
2013/09/27 职场文书
商务邀请函范文
2014/01/14 职场文书
《海上日出》教学反思
2016/02/23 职场文书