今天查看了下js的原型对象和普通对象,二者的不同之处是原型对象有构造constructor属性,而普通对象仅仅有一个不能被访问到的proto属性。
所以,对对象的所有操作,比如for in循环,我们也可以通过得到函数的prototype来操作原型对象,二者本质上是一致的。既然是一致的所以原型对象上也会有proto属性,js高级教程第六章有提到,这个属性其实就是个指针,那么原型对象的这个属性又指向谁呢?
这里,我定义了一个简单的对象,Person。

正如你所看到的,Person原型的proto,也就是原型的原型,就是Object.prototype。从这个角度上也可以解释原型链吧!那Object是什么呢?哈哈哈,它也仅仅是一个构造函数而已。

但要注意,在用for in循环对象上属性的时候,我们可能不能得到原型对象上的constructor属性,因为for in 循环只能循环可枚举类型,而constructor属性是不可枚举的。
网友评论