某个群友关于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后将不再向上查找值。

评论

0 / 800
全部评论()