某个群友关于prototype的问题
引子
A: 帅哥美女 Array.prototype上为什么也有length属性
B: 不然呢?
A: 它是个对象啊 其它对象也没这属性
B: 不然的话,['a'].length 咋来的?
A: 而且它的值永远是0
这个是实例自身的。并不是原型上的
hasOwnproprty下是true
其实这种问题直接在控制台写个demo就能清楚了
demo
const obj = {};
console.log(obj.test); // undefined
Object.prototype.test = 10;
console.log(obj.test); // 10
console.log(obj.hasOwnProperty("test")); // false
obj.test = 20;
console.log(obj.hasOwnProperty("test")); // true
console.log(Object.prototype.test); // 10
Object.prototype.test = 100;
console.log(obj.test); // 20
总结
从上面的demo中可以得知obj开始是没用test属性的,然后设置Object.prototype.test=10,那么obj就能向上查找到test属性,这时候通过obj.hasOwnProperty("test")得知obj的test不属于obj;
然后再设置obj.test=20,这时获取Object.prototype.test的值仍为10,并不会向上设置,通过obj.hasOwnProperty("test")得知obj的test属于obj;
最后再设置Object.prototype.test = 100,获取obj.test,得值为20,从这可以得知当obj有了自己的test后将不再向上查找值。
评论