当执行 一个对象赋值操作的时候  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 查找属性的过程的更多相关文章

  1. css z-index属性使用过程中遇到的问题

    z-index属性在web开发中会经常使用,其主要的作用简单的说就是把元素的position设置为absolute.fixed之后,可以调节元素在文档上的层级关系.比如经常见到的dialog,mask ...

  2. JavaScript对象属性的基础教程指南

    JavaScript是使用“对象化编程”的,或者叫“面向对象编程”的.所谓“对象化编程”,意思是把JavaScript能涉及的范围划分成大大小小的对象,对象下面还继续划分对象直至非常详细为止,所有的编 ...

  3. Javascript对象属性与方法汇总

    Javascript对象属性与方法汇总 发布时间:2015-03-06 编辑:www.jquerycn.cn 详细介绍下,javascript对象属性与对象方法的相关知识,包括javascript字符 ...

  4. javascript引擎执行的过程的理解--执行阶段

    一.概述 同步更新sau交流学习社区(nodeJSBlog):javascript引擎执行的过程的理解--执行阶段 js引擎执行过程主要分为三个阶段,分别是语法分析,预编译和执行阶段,上篇文章我们介绍 ...

  5. JavaScript document属性和方法

    JavaScript document属性和方法 --------------------------------------------属性: 1. Attributes     存储节点的属性列表 ...

  6. JavaScript 全局属性/函数

    JavaScript 全局 JavaScript 全局属性和方法可用于创建Javascript对象. JavaScript 全局属性 属性 描述 Infinity 代表正的无穷大的数值. NaN 指示 ...

  7. 删除要被替换的元素的所有事件处理 程序和 JavaScript 对象属性

    使用本节介绍的方法替换子节点可能会导致浏览器的内存占用问题,尤其是在 IE 中,问题更加明显.在删除带有事件处理程序或引用了其他 JavaScript 对象子树时,就有可能导致内存占用问题.假设 某个 ...

  8. javascript 节点属性详解

    javascript 节点属性详解 根据 DOM,html 文档中的每个成分都是一个节点 DOM 是这样规定的:整个文档是一个文档节点每个 html 标签是一个元素节点包含在于 html 元素中的文本 ...

  9. Javascript 查找字符串中出现最多的字符和出现的次数

    <script type="text/javascript"> //查找字符串中出现最多的字符和出现的次数 var str = 'Thatwheneying its o ...

随机推荐

  1. 每日一道 LeetCode (3):回文数

    前文合集 每日一道 LeetCode 文章合集 题目:回文数 题目来源:https://leetcode-cn.com/problems/palindrome-number/ 判断一个整数是否是回文数 ...

  2. 声明式事务xml Spring

    !--JDBC事务管理器--><bean id="tansactionManager" class="org.springframework.jdbc.dat ...

  3. Android 的Glide、TabLayout、RecyclerView(下一章补充)。

    今天的内容主要和一些依赖有关, //Glide依赖implementation 'com.github.bumptech.glide:glide:4.11.0'//Google Design依赖//n ...

  4. 精讲RestTemplate第3篇-GET请求使用方法详解

    本文是精讲RestTemplate第3篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层H ...

  5. 移动端与Web端疫情数据展示

    1.题目要求 2.整体思想 首先是在前两阶段已经完成的echarts可视化.利用Jsoup爬取疫情数据基础上来进行调用与完善.大致思想是在Android Studio上完成交互去调用ecplise中的 ...

  6. 修改mac系统名字&&神秘bogon

    问题分析 你是否遇见过突然终端突然出现奇怪 bogon # name @ bogon in ~ [22:31:01] $ 这是因为终端会先向 DNS 请求查询当前 IP 的反向域名解析的结果,如果查询 ...

  7. 使用DockerFile构建运行GoWeb

    安装docker # 安装一些必要的系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加软件源信息 # ...

  8. C# ASP 动态添加Html Table行

    用JS放法实现以下效果: 前端文件Questionnaire23.aspx: <%@ Page Title="题目" Language="C#" Mast ...

  9. C#LeetCode刷题之#876-链表的中间结点(Middle of the Linked List)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3836 访问. 给定一个带有头结点 head 的非空单链表,返回链 ...

  10. shazidouhui的使用体验

    这个软件有三个界面,一个是我的,一个是已批改作业,一个是未完成作业,但是,我不知道怎么用除了“我的”这个界面以外的其他两个界面,这一点还是需要优化优化,另外就是登陆界面确实还存在一点问题,有待改进.