js原型个人理解

首先: var obj = 对象, ctr = 构造函数;

1.所有对象都有__proto__ 属性: obj.__proto__;

2.所有构造函数都有prototype属性: ctr.prototype;

3.一个对象的__proto__ 指向 其构造函数的原型,也就是 obj.__proto__ ===  ctr.prototype;

 

obj.__proto__  是一个对象的表现;是一个继承的属性;表示对象是来自于哪里,并携带创建这个对象的构造函数一些特性,自身属性外的所有继承的属性都在这里(获取继承);在构造函数原型对象的constructor没有被改变的情况下,完全可以体现出其血统 ;

ctx.prototype   是一个构造函数的表现;构造函数的原型;包含一个指向构造函数自身的constructor(用于创建实例对象独有属性,及标注实例血统);以及所有需要被继承的属性;

那么问题来了,原型是由谁创建的呢? 先理解为他是一个由 "神" 创建的对象~

 

因为JavaScript一切皆对象,所以所有的 "对象" 都有一个对象的表现

通过 __proto__ 和 prototype 可以表现出看出一个 "对象" 的表现

 

 

1.函数对象的表现

所有构造函数都是Function 创建的,包括Function自身,因为obj.__proto__可以找出其来源,所以会有以下表现

 

2.构造函数对象的表现

 先看一下,构造函数和函数的区别:

 

都是函数对象,emmm...

再看一下所有函数对象都有的原型

都是一个带有consrtuctor属性的对象;二者并没有什么大的区别,所以为了区分,在定义时,将构造函数首字母大写以便区分;

Function也是构造函数,只是他是特殊的,他的构造函数是它自身Function.constructor === Function,原型的构造函数也是自身Function.constructor ===Function;

 

3. 函数原型

因为ctr(构造函数).prototype也是一个对象,可以通过__proto__ 找到其原型的构造函数,可以看出ctr.prototype是一个继承Object.prototype的Object的实例,Object的属性通过prototype传递给ctx.prototype, 再由ctx.prototype传递给他的实例;

继承的关键也就是构造函数的prototype;

 

3.原型链:

 

通过原型一层一层向后传递,形成原型链,给原型添加属性会传递给后代;

实例继承的属性是预先向构造函数原型中添加的;

通过溯本还原,

Object.prototype.__proto__ === null

所以原型链的顶端为null,这个神身份就此曝光,而且他也是一个对象;typeof null === "object"

而Function.prototype.__proto__ === Object.prototype,则表明了函数是JavaScript第一公民的来历;因为他正是从无到有的第一个对象;

 

转载于:https://www.cnblogs.com/tatelZhang/p/7764653.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值