js每个对象拥有一个原型对象吗?

dog是函数对象,本身没有price属性,此时dog的__proto__属性指向的是其构造函数的原型。

我想,题主对于构造函数和原型对象的概念理解的还不够透彻。

所谓构造函数,是生成一个对象的模板,是生成对象的函数。一个构造函数,可以生成多个实例对象,每个实例对象都有相同的结构。

接以上的例子,当你使用new操作符调用Keith构造函数时,会经历以下步骤:
1.创建一个空对象,作为将要返回的实例对象
2.将空对象的原型指向构造函数的prototype属性,也就是Keith构造函数的prototype属性。
3.将空对象赋值给构造函数内部的this关键字,也就是this关键字会指向实例对象。
4.开始执行构造函数内部的代码。

题主的第一个问题是,Keith.prototype指向实例原型,但是它具体指向什么?

当然了,person2实例对象也是如此。

另外。当为构造函数定义原型属性,并且访问原型属性时,

但是这样访问一个原型属性是没有意义的。而是应该通过对象实例来访问原型属性。

person1实例对象本身是没有mm属性的,所以会在原型Keith.protoype上查找。在原型找到了mm属性,所以就继承了原型的mm属性。若原型上没有mm属性,会继续在原型的原型上查找,直到null对象,若还是没有该属性,则返回undefined。

回答题主的最后一个问题:car是构造函数 OMakeNewCar 的实例,为什么car.prototype指向的不是构造函数?

从例子上面的说明,我想题主应该知道原因了。构造函数只是提供创建对象的模板,而不是原型对象。所以person1.prototype指向的不是构造函数,而是构造函数的原型。

这里稍微改正一下,是personal1._proto_的内部属性指向了原型对象

我要回帖

更多关于 原型对象和对象原型的区别 的文章

 

随机推荐