javascript 查找属性的过程
当执行 一个对象赋值操作的时候 js引擎会怎样处理呢???
例如 有个foo对象 ,要进行这个操作 foo.a=2
1, 首先会在foo对象中查找,如果不存在a属性,就会去原型链上面找,如果原型链上面也不存在该属性,就会在foo对象中创建一个a属性并且值为2
2 , 如果foo对象中不存在,在原型上层找到了a 属性,之后会进行一下三种情况:
①,如果原型上层的a属性是普通数据属性,且不是只读属性,那么就会在foo对象中创建一个a属性并且值为2,屏蔽了原型上层的a属性
②,如果原型上层的a属性是只读属性,那么该操作会被忽略,在严格模式下,会报错
③,如果原型上层的a属性是存储器属性,那么就会调用setter方法,不会在foo对象中创建a属性,也不会重新定义a这个setter
下面是些例子:
// var obj={
// a:1,
// b:2,
// }
// 第一种情况
var obj1={
//数据属性
c:2,
d:3,
e:function(){
return this.c;
}
}
// obj.__proto__=obj1;
function f(){
this.a=1;
this.b=2;
}
f.prototype=obj1;
var obj=new f();
console.log(obj.d);//
obj.d=6;
console.log(obj.d);//
console.log(obj1.d);//
// 第二种情况
Object.defineProperty(obj1,'ff',{
value:11,
writable:false,
configurable:true,
enumerable:true
})
console.log(obj.ff);//
obj.ff=33;
console.log(obj.ff);//
console.log(obj1.ff);//
// 第三种情况
Object.defineProperty(obj1,'g',{//访问器属性
get:function(){
return this.c
},
set:function(val){
console.log("我被执行了");
this.c=val
},
})
console.log(obj.g);//
obj.g=22;
console.log(obj.g);//
console.log(obj1.g);//
总结的方法:
for...in.. 遍历对象中所有可枚举的属性(包括自有属性和继承的属性)
Object.keys() 返回值是数组,由对象中可枚举的自有属性名称组成
Object.getOwnProperty() 返回对象的自有属性 (括可枚举和不可枚举)
Object.hasOwnProperty(x) 检测x是否是对象的自有属性,对于继承的属性它返回false
Object.isPrototypeof(x) 检测某对象是否是x对象的原型(或处于原型链中)
Object.propertyIsEnumerable(x) 检测x属性是自有属性且这个属性是可枚举的它返回true
Object.getOwnPropertyDescriptor(obj, prop) 可获取某对象的自有属性的属性描述符
Object.getOwnPropertyNames() 返回对象的所有自有属性名称(包括可枚举和不可枚举)
Object.getPrototypeof(x) 可以查询x的原型 数据属性四个特性
1)configurable:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或能否把属性修改为访问器属性,默认为true
2)enumerable:表示能否通过for-in循环返回属性
3)writable:表示能否修改属性的值
4)value:包含该属性的数据值。默认为undefined 存储器属性四个特性
1)configurable:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或能否把属性修改为访问器属性,默认为true
2)enumerable:表示能否通过for-in循环返回属性
3)set:写入
4)get:读取
javascript 查找属性的过程的更多相关文章
- css z-index属性使用过程中遇到的问题
z-index属性在web开发中会经常使用,其主要的作用简单的说就是把元素的position设置为absolute.fixed之后,可以调节元素在文档上的层级关系.比如经常见到的dialog,mask ...
- JavaScript对象属性的基础教程指南
JavaScript是使用“对象化编程”的,或者叫“面向对象编程”的.所谓“对象化编程”,意思是把JavaScript能涉及的范围划分成大大小小的对象,对象下面还继续划分对象直至非常详细为止,所有的编 ...
- Javascript对象属性与方法汇总
Javascript对象属性与方法汇总 发布时间:2015-03-06 编辑:www.jquerycn.cn 详细介绍下,javascript对象属性与对象方法的相关知识,包括javascript字符 ...
- javascript引擎执行的过程的理解--执行阶段
一.概述 同步更新sau交流学习社区(nodeJSBlog):javascript引擎执行的过程的理解--执行阶段 js引擎执行过程主要分为三个阶段,分别是语法分析,预编译和执行阶段,上篇文章我们介绍 ...
- JavaScript document属性和方法
JavaScript document属性和方法 --------------------------------------------属性: 1. Attributes 存储节点的属性列表 ...
- JavaScript 全局属性/函数
JavaScript 全局 JavaScript 全局属性和方法可用于创建Javascript对象. JavaScript 全局属性 属性 描述 Infinity 代表正的无穷大的数值. NaN 指示 ...
- 删除要被替换的元素的所有事件处理 程序和 JavaScript 对象属性
使用本节介绍的方法替换子节点可能会导致浏览器的内存占用问题,尤其是在 IE 中,问题更加明显.在删除带有事件处理程序或引用了其他 JavaScript 对象子树时,就有可能导致内存占用问题.假设 某个 ...
- javascript 节点属性详解
javascript 节点属性详解 根据 DOM,html 文档中的每个成分都是一个节点 DOM 是这样规定的:整个文档是一个文档节点每个 html 标签是一个元素节点包含在于 html 元素中的文本 ...
- Javascript 查找字符串中出现最多的字符和出现的次数
<script type="text/javascript"> //查找字符串中出现最多的字符和出现的次数 var str = 'Thatwheneying its o ...
随机推荐
- Spring学习总结(8)-接口多个实现类的动态调用
需求描述:当一个接口有2个以上的实现类时,调用方需要根据参数选择只其中一个实现类 Spring版本:5.1.8.RELEASE 1. 接口和实现类 /** * 接口 */ public interfa ...
- Xposed原理分析
目录 安卓系统启动 什么zygote? 安卓应用运行? Xposed介绍 Xposed构成 Xposed初始化大体工作流程 源码分析 初始化 app_main#main app_main#initia ...
- python8.3多进程
from multiprocessing import Processimport time def run1 (name,sex): print(name,sex,"执行进程1" ...
- 030_go语言中的通道关闭
代码演示 package main import "fmt" func main() { jobs := make(chan int, 5) done := make(chan b ...
- maven配置问题
今天配置maven环境,最后总是显示 百度好多方法,都没解决,最后查看了一下maven目录下的mvn.cmd文件发现里面的jdk引用名用的是%JAVA_HOME%..... 看完就发现问题了,自己装了 ...
- java Eclipse刷新报错 Feature 'taglib' not found.
刷新工程报错:org.eclipse.emf.ecore.xmi.FeatureNotFoundException: Feature 'taglib' not found. 错误原因:tomcat7, ...
- MySQL数据库的约束
一 默认值约束 约束语句 default ‘默认值’ 在建立表的时候在想要加默认约束的字段名,数据类型后面加default ‘默认值’ 例如 : create table emp( uid int ...
- HTTP PUT/POST/PATCH的区别
幂等 idempotent 幂等操作的特定就是其任意多次执行所产生的影响与一次执行的影响相同 POST POST 用来创建一个新的数据 POST 不是幂等的, 意味着多次操作的结果是不同的, 多次操作 ...
- Vue 如何优雅的根据条件动态显示组件
常规情况下,在里动态加载不同组件的方式为: <template> <!-- 符合条件A,加载组件A --> <BusinessComponentA v-if=" ...
- Linux学习日志——基本指令②
文章目录 Linux学习日志--基本指令② 前言 touch cp (copy) mv (move) rm vim 输出重定向(> 或 >>) cat df(disk free) f ...