博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
细节:js 原型对象与for-in 方法枚举的问题
阅读量:6972 次
发布时间:2019-06-27

本文共 1903 字,大约阅读时间需要 6 分钟。

js 原型对象与for-in 方法枚举的问题

原型属性的[[enumerable]]属性与for-in 的枚举问题

有的时候[[enumerable]]设置成false 时仍然会被for-in 方法枚举到。详细情况如下:

function Person(){};Person.prototype = {    constructor: Person,    name: "Oliver"};        var person1 = new Person();        Object.defineProperty(person1,"name",{enumerable: true})for (var x in person1){    console.log(x);}

这里原型对象存在name 属性,person1 的name 属性enumerable 为true,可以枚举。

function Person(){};Person.prototype = {    constructor: Person,    name: "Oliver"};        var person1 = new Person();        Object.defineProperty(person1,"name",{    enumerable: false})for (var x in person1){    console.log(x);}

这里原型对象存在name 属性,person1 的name 属性enumerable 为false,也可以枚举。

function Person(){};Person.prototype = {    constructor: Person,};        var person1 = new Person();        Object.defineProperty(person1,"name",{    enumerable: true})for (var x in person1){    console.log(x);}

这里原型对象不存在name 属性,person1 的name 属性enumerable 为true,可以枚举。

function Person(){};Person.prototype = {    constructor: Person,};        var person1 = new Person();        Object.defineProperty(person1,"name",{    enumerable: false})for (var x in person1){    console.log(x);}

这里原型对象不存在name 属性,person1 的name 属性enumerable 为false,不可枚举。

综上所述,原型对象和实例如果都存在同名属性,则无论实例中该属性的[[enumerable]]是true 还是false 都可以被for-in 枚举。


另一方面:

function Person(){};Person.prototype = {    constructor: Person,    name: "Oliver"};        var person1 = new Person();        Object.defineProperty(Person.prototype,"name",{    enumerable: true})for (var x in Person.prototype){    console.log(x);}

原型对象的属性如果被修改了[[enumerable]],则按照规则返回结果。

function Person(){};Person.prototype = {    constructor: Person,};        var person1 = new Person();        Object.defineProperty(Person.prototype,"name",{    enumerable: false})for (var x in Person.prototype){    console.log(x);}

新建立的原型对象的属性[[enumerable]],也是按照规则返回结果。

最后,再重申一遍,如果原型对象合实例存在同名属性,无论如何都会被for-in 枚举。

转载地址:http://ydosl.baihongyu.com/

你可能感兴趣的文章
洛谷P1196 银河英雄传说
查看>>
aop为系统添加操作日志,注入或配置声明的方式来实现
查看>>
好用的日期控件jeDate
查看>>
Ajax学习之------>Ajax和Json实现无限下拉框联动(上)
查看>>
古今之成大事业、大学问者,必经过三种之境界
查看>>
我的Android进阶之旅------>Android中编解码学习笔记
查看>>
我的Android进阶之旅------>android如何将List请求参数列表转换为json格式
查看>>
转载:负载均衡器技术Nginx和F5的优缺点对比
查看>>
【资源共享】5G AP分析
查看>>
APP测试与Web测试的区别
查看>>
模式识别,计算机视觉领域,期刊
查看>>
AngularJs的UI组件ui-Bootstrap分享(三)——Accordion
查看>>
中缀、前缀和后缀表达式
查看>>
Redis 自定义对象 cannot be cast to java.lang.String
查看>>
[题解]第十一届北航程序设计竞赛预赛——H.高中数学题
查看>>
内置对象Array及Array常见操作
查看>>
oracle 表字段新增、修改、删除、重命名以及表重命名
查看>>
Python连接MySQL之Python库pymysql
查看>>
Android 图文教学让你彻底理解activity启动模式
查看>>
串口发送数据处理——状态机方式
查看>>