有关prototype的理解

    prototype(指针)是指向通过构造函数创建某个实例的原型对象,原型对象的特点就是:所有对象实例都可以共享它包含的属性和方法。但是其实prototype是每个构造函数的属性而已,只能说万物皆对象罢了。

    所以创建一个函数就会,为该函数创建一个protopyte属性,这个属性指向函数的原型对象。默认情况下,所有的原型对象会获得一个constructor属性,这个属性是一个指向protopyte属性所在函数的指针。

     普通对象:有__proto__属性,没有prototype属性。

     原型对象:person.prototype 原型对象还有constructor属性(指向构造函数对象)

     函数对象:通过new Function()创建 拥有__proto__、prototype属性(指向原型对象)。


function Car(){};

Car.prototype.color="白色"

var car1 = new Car();
var car2 = new Car();

car2.color="黑色"


console.log(car2.color) //来自实例
console.log(car1.color) //来自原型

   构造函数 <——(指针constructor)——原型对象 <——(指针_proto_)—— 实例

  function Car() <——(指针constructor)——Car.prototype <——(指针_proto_)—— car1 

 

     原型链

        每个构函数都有一个原型对象,原型对象都有一个指向构造函数的指针(constructor),实例包含指向原型对象的指针              (_proto__)

         

   原型链,其实就是实例对象和原型之间组成的链条,就是用来实现共享属性和继承的。

JS在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做_ proto _的内置属性,用于指向创建它的函数对象的原型对象prototype.。这个有_ proto _ 串起来的直到Object.prototype._ proto _为null的链叫做原型链。如下图:

构造函数实例原型对象的区别

   实例就是通过构造函数创建的。实例一创造出来就具有constructor属性(指向构造函数)和proto属性(指向原型对象)

   构造函数中有一个prototype属性,这个属性是一个指针,指向它的原型对象。

   原型对象内部也有一个指针(constructor属性)指向构造函数:Person.prototype.constructor = Person,实例可以访问原型对象上定义的属性和方法。

总结:

1.protopyte:

        只有函数才有的属性,它指向了一个对象,这个对象正是调用该构造函数而创建的实例的原型,也就是这个例子中的car1和car2的原型。(原型:每一个JavaScript对象(null除外)在创建的时候就会与之关联另一个对象,这个对象就是我们所说的原型,每一个对象都会从原型”继承”属性)

2.proto :

      每个对象都有的属性,它指向该对象的原型。car1.proto===Car.protopyte

3.construcotr:

     每个原型都有一个constructor属性指向关联的构造函数

4.实例与原型:

      当读取实例的属性时,如果找不到,就会查找与对象关联的原型中的属性,如果还查不到,就去找原型的原型,一直找到最        顶层为止。所以原型对象是通过Object构造函数生成的,结合之前所讲,实例的proto指向构造函数的prototype.
 

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值