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版DateAdd和DateDiff函数代码
Mar 01 Javascript
在JavaScript中实现类的方式探讨
Aug 28 Javascript
jQuery删除节点的三个方法即remove()detach()和empty()
Dec 27 Javascript
node.js中的fs.writeFile方法使用说明
Dec 14 Javascript
Bootstrap滚动监听(Scrollspy)插件详解
Apr 26 Javascript
Javascript从数组中随机取出不同元素的两种方法
Sep 22 Javascript
浅谈jquery采用attr修改form表单enctype不起作用的问题
Nov 25 Javascript
element-ui使用导航栏跳转路由的用法详解
Aug 22 Javascript
Vue页面跳转动画效果的实现方法
Sep 23 Javascript
js尾调用优化的实现
May 23 Javascript
layer弹出层显示在top顶层的方法
Sep 11 Javascript
浅析vue-router实现原理及两种模式
Feb 11 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
删除及到期域名的查看(抢域名必备哦)
2008/05/14 PHP
ThinkPHP5&5.1框架关联模型分页操作示例
2019/08/03 PHP
在Z-Blog中运行代码[html][/html](纯JS版)
2007/03/25 Javascript
浅析jQuery中常用的元素查找方法总结
2013/07/04 Javascript
AngularJS内建服务$location及其功能详解
2016/07/01 Javascript
JavaScript实现简单的拖动效果
2016/07/02 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
2016/08/03 Javascript
JavaScript Date对象应用实例分享
2017/10/30 Javascript
JavaScript栈和队列相关操作与实现方法详解
2018/12/07 Javascript
vue打包之后生成一个配置文件修改接口的方法
2018/12/09 Javascript
atom-design(Vue.js移动端组件库)手势组件使用教程
2019/05/16 Javascript
vue项目实现图片上传功能
2019/12/23 Javascript
es6函数之箭头函数用法实例详解
2020/04/25 Javascript
express异步函数异常捕获示例详解
2020/11/30 Javascript
[04:38]完美世界携手游戏风云打造 卡尔工作室饰品系统篇
2013/04/25 DOTA
[41:54]2018DOTA2亚洲邀请赛 4.1 小组赛A组加赛 TNC vs Liquid
2018/04/03 DOTA
基于循环神经网络(RNN)实现影评情感分类
2018/03/26 Python
对pandas处理json数据的方法详解
2019/02/08 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
2019/04/12 Python
Python udp网络程序实现发送、接收数据功能示例
2019/12/09 Python
Python ADF 单位根检验 如何查看结果的实现
2020/06/03 Python
Python包和模块的分发详细介绍
2020/06/19 Python
Python 多进程原理及实现
2020/12/21 Python
详解Python遍历列表时删除元素的正确做法
2021/01/07 Python
微信浏览器左上角返回按钮拦截功能
2017/11/21 HTML / CSS
野兽派官方旗舰店:THE BEAST 野兽派
2016/08/05 全球购物
雅高酒店中国:Accorhotels.com China
2018/03/26 全球购物
Pedro官网:新加坡时尚品牌
2019/08/27 全球购物
Timberland法国官网:购买靴子、鞋子、衣服、夹克和配饰
2019/11/30 全球购物
明信片寄语大全
2014/04/08 职场文书
社保代办委托书怎么写
2014/10/06 职场文书
MySQL系列之三 基础篇
2021/07/02 MySQL
Redis源码阅读:Redis字符串SDS详解
2021/07/15 Redis
Java工作中实用的代码优化技巧分享
2022/04/21 Java/Android
python实现双向链表原理
2022/05/25 Python
js前端面试常见浏览器缓存强缓存及协商缓存实例
2022/06/21 Javascript