请问以下两次检测对象constructor是否拥有属性名1的结果分别是什么?
1 in Object(1.0).constructor;
Number[1] = 123;
1 in Object(1.0).constructor;
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(){}
标签:1.0,对象,请问,Object,Number,constructor,属性 From: https://www.cnblogs.com/longmo666/p/17824791.html