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 相关文章推荐
javascript 继承实现方法
Aug 26 Javascript
JSON 客户端和服务器端的格式转换
Aug 27 Javascript
关于JavaScript中var声明变量作用域的推断
Dec 16 Javascript
javascript中的作用域scope介绍
Dec 28 Javascript
js 性能优化之算法和流程控制
Feb 15 Javascript
JavaScript初学者必看“new”
Jun 12 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
Jul 26 Javascript
VueJs监听window.resize方法示例
Jan 17 Javascript
vue判断input输入内容全是空格的方法
Mar 02 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
Apr 01 Javascript
微信小程序视图控件与bindtap之间的问题的解决
Apr 08 Javascript
VUE Elemen-ui之穿梭框使用方法详解
Jan 19 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下统计用户在线时间的一种尝试
2010/08/26 PHP
php模块memcache和memcached区别分析
2011/06/14 PHP
解析使用substr截取UTF-8中文字符串出现乱码的问题
2013/06/20 PHP
PHP链表操作简单示例
2016/10/15 PHP
网上抓的一个特效
2007/05/11 Javascript
javascript提取URL的搜索字符串中的参数(自定义函数实现)
2013/01/22 Javascript
jQuery实现可拖动的浮动层完整代码
2013/05/27 Javascript
js实现点小图看大图效果的思路及示例代码
2013/10/28 Javascript
javascript中创建对象的几种方法总结
2013/11/01 Javascript
不使用jquery实现js打字效果示例分享
2014/01/19 Javascript
JavaScript数组常用方法
2015/03/02 Javascript
JS实现table表格数据排序功能(可支持动态数据+分页效果)
2016/05/26 Javascript
老生常谈JavaScript数组的用法
2016/06/10 Javascript
Vue.js动态添加、删除选题的实例代码
2016/09/30 Javascript
vue父组件中获取子组件中的数据(实例讲解)
2017/09/27 Javascript
vue定义全局变量和全局方法的方法示例
2018/08/01 Javascript
微信小程序实现笑脸评分功能
2018/11/03 Javascript
微信小程序实现分页加载效果
2020/11/19 Javascript
Python实现的端口扫描功能示例
2018/04/08 Python
python斐波那契数列的计算方法
2018/09/27 Python
python绘制评估优化算法性能的测试函数
2019/06/25 Python
Python List列表对象内置方法实例详解
2019/10/22 Python
使用Python操作ArangoDB的方法步骤
2020/02/02 Python
Python小白学习爬虫常用请求报头
2020/06/03 Python
KEETSA环保床垫:更好的睡眠,更好的生活!
2016/11/24 全球购物
印尼最大的婴儿用品购物网站:Orami
2017/09/28 全球购物
奥地利体育网上商店:Gigasport
2019/10/09 全球购物
村官工作鉴定评语
2014/01/27 职场文书
银行见习期自我鉴定
2014/01/29 职场文书
函授毕业个人自我评价
2014/02/20 职场文书
保护环境的建议书
2014/03/12 职场文书
KTV门卫岗位职责
2014/10/09 职场文书
2014年幼儿园德育工作总结
2014/12/17 职场文书
困难补助申请报告
2015/05/19 职场文书
2016年暑期见闻作文
2015/11/25 职场文书
详解RedisTemplate下Redis分布式锁引发的系列问题
2021/04/27 Redis