请问以下两次检测对象constructor是否拥有属性名1的结果分别是什么?
请问以下两次检测对象constructor是否拥有属性名1的结果分别是什么?
false、true
实际上Object(1.0)就是将数字“1.0”封装成它对应的包装类的一个对象实例比如Number(1.0),所以目的是为了检测1是否在Number上。
一开始1并不在Number原型链上所以返回false,直到添加了“Number[1]”这个下标属性之后才让1处于Number的原型链上,也因此返回了true。
constructor 是构造函数属性。它是谁的属性?它是原型属性 prototype 所指向的那个对象的属性。
Object(1.0).constructor 的原型是 Number 对象。
Number 对象本身可作为构造函数,所以 Object(1.0).constructor 就是 Number 对象本身。
-
在浏览器控制可以看到 Object(1.0).constructor 的原型上的 constructor 属性指向的构造函数即 Number 对象 最初没有 属性 1 ;
-
通过 Object[key] = value; 形式给 constructor 对象添加 key = 1 属性,对应的 value = 123 ;
-
第二次 检测对象 constructor 时就有了属性 1 。
Object(1.0)相当于new Number(1.0),实例化了一个Number类型的对象,
这个对象的constructor,也就是Object(1.0).constructor
指向实例化这个对象的构造函数,也就是Number,
因此第一行1 in Object(1.0).constructor的意思是判断此时的Number构造函数里是否包含1这个属性,结果显然是false;
Number是构造函数,也是对象,是对象就能添加属性,第二行Number[1] = 123给Number添加了一个属性1,值为123,此时Number函数里就包含了属性1,因此第三行1 in Object(1.0).constructor结果为true.
Object(1)是把1转成包装数字对象1,它没有属性constructor,所以会去它的原型对象Number.prototype上去找所以结果是Number(){}
__EOF__

本文链接:https://www.cnblogs.com/longmo666/p/17824791.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)