当执行 一个对象赋值操作的时候  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. PHP quoted_printable_decode() 函数

    实例 对经过 quoted-printable 编码后的字符串进行解码,返回 8 位的 ASCII 字符串: <?php高佣联盟 www.cgewang.com$str = "Hell ...

  2. luogu P4590 [TJOI2018]游园会 dp套dp

    LINK:游园会 容易想到 设\(f[i][j][k][l]\)前i个字符 j表示状压的w个字符状态为j 长度<=k 匹配到了NOI的第l个位置的方案数. 不过只能得到30分. 考虑优化 其实优 ...

  3. DB_LINK删除

    由于业务需求,对测试库数据进行模糊化.为保生产数据安全,先删db_link; 1.共有db_link删除: select 'drop public database link '||db_link|| ...

  4. Spring Boot的自动配置,到底是怎么做到?

    作者:祖大帅 链接:juejin.im/post/5b679fbc5188251aad213110 来源:掘金 1. Spring Boot.Spring MVC 和 Spring 有什么区别? 分开 ...

  5. java进阶(2)--抽象类

    一.抽象类集刺虎: 1.概念 类与类之前有共同特征,将这些共同特征提取出来,行为抽象类   2.抽象类的数据类型: 引用数据类型   3.语法 [修饰符列表]abstract Class 类型{类体} ...

  6. javaWeb Maven Runner设置中文乱码

    将Runner设置为 -DarchetypeCatal! 使maven在没有网络的情况下在本地查找下载好的插件 配置 -Dfile.encoding=gb2312 防止中文乱码

  7. java多线程编程实例

    [转]这篇文章主要介绍了java多线程编程实例,分享了几则多线程的实例代码,具有一定参考价值,加深多线程编程的理解还是很有帮助的,需要的朋友可以参考下. 1.三个售票窗口同时出售20张票程序分析:   ...

  8. yum自建离线仓库

    1.步骤 centOS的安装包,完整版最好--everyhing版本 解压缩 将文件夹内Packages文件导入系统 执行命令如下: 1. mv ./Packages/ /mnt/ 2. create ...

  9. IdentityServer4 (2) 密码授权(Resource Owner Password)

    写在前面 1.源码(.Net Core 2.2) git地址:https://github.com/yizhaoxian/CoreIdentityServer4Demo.git 2.相关章节 2.1. ...

  10. kubernetes 中安装 heapster 问题

    step1: 在官网下载部署文件 https://github.com/kubernetes-retired/heapster/tree/master/deploy/kube-config/influ ...