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的解析执行顺序在各个浏览器中的不同
Mar 17 Javascript
javascript中String对象的slice()方法分析
Dec 20 Javascript
jQuery+ajax实现无刷新级联菜单示例
May 21 Javascript
超详细的javascript数组方法汇总
Nov 21 Javascript
jQuery Chart图表制作组件Highcharts用法详解
Jun 01 Javascript
JavaScript的this关键字的理解
Jun 18 Javascript
BootStrap3中模态对话框的使用
Jan 06 Javascript
JS利用正则表达式实现简单的密码强弱判断实例
Jun 16 Javascript
详解vue-cli + webpack 多页面实例配置优化方法
Jul 13 Javascript
搭建基于express框架运行环境的方法步骤
Nov 15 Javascript
如何实现双向绑定mvvm的原理实现
May 28 Javascript
vue中使用[provide/inject]实现页面reload的方法
Sep 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
Protoss魔法科技
2020/03/14 星际争霸
[原创]PHP简单开启curl的方法(测试可行)
2016/01/11 PHP
php版阿里大于(阿里大鱼)短信发送实例详解
2016/11/30 PHP
Laravel实现批量更新多条数据
2020/04/06 PHP
javascript textarea光标定位方法(兼容IE和FF)
2011/03/12 Javascript
jquery 操作iframe的几种方法总结
2013/12/13 Javascript
jquery实现不同大小浏览器使用不同的css样式表的方法
2014/04/02 Javascript
基于javascript的JSON格式页面展示美化方法
2014/07/02 Javascript
js创建表单元素并使用submit进行提交
2014/08/14 Javascript
JavaScript实现带箭头标识的多级下拉菜单效果
2015/08/27 Javascript
JS实现日期时间动态显示的方法
2015/12/07 Javascript
Javascript点击其他任意地方隐藏关闭DIV实例
2016/06/21 Javascript
JavaScript实现邮箱地址自动匹配功能代码
2016/11/28 Javascript
详解vue2.0组件通信各种情况总结与实例分析
2017/03/22 Javascript
Vue与Node.js通过socket.io通信的示例代码
2018/07/25 Javascript
关于Vue中$refs的探索浅析
2020/11/05 Javascript
[02:15]2015国际邀请赛选手档案IG.Ferrari 430
2015/07/30 DOTA
[01:03:36]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第二场 1月26日
2021/03/11 DOTA
Python-基础-入门 简介
2014/08/09 Python
python人人网登录应用实例
2014/09/26 Python
wxPython使用系统剪切板的方法
2015/06/16 Python
python线程池threadpool实现篇
2018/04/27 Python
Python使用OpenCV进行标定
2018/05/08 Python
浅谈django rest jwt vue 跨域问题
2018/10/26 Python
详解pyppeteer(python版puppeteer)基本使用
2019/06/12 Python
django 使用 PIL 压缩图片的例子
2019/08/16 Python
纯CSS3制作页面切换效果的实例代码
2019/05/30 HTML / CSS
HTML5中meta属性的使用方法
2016/02/29 HTML / CSS
澳大利亚免息网上购物:Shop Zero
2016/09/17 全球购物
食品安全演讲稿
2014/09/01 职场文书
2014年学生会生活部工作总结
2014/11/07 职场文书
2014年个人师德工作总结
2014/12/04 职场文书
九不准学习心得体会
2016/01/23 职场文书
导游词之重庆钓鱼城
2019/09/19 职场文书
MySQL 8.0 之不可见列的基本操作
2021/05/20 MySQL
宫崎骏十大动画电影,宫崎骏好看的动画电影排名
2022/03/22 日漫