原型(prototype)是函数创建的时候默认自带的。只要创建函数,他就默认存在。
要理解原型,还要知道,我们所有对象最终都是都是继承自Object的。
通过构造函数创建的对象也有一个原型(__proto__),即构造函数的原型(这里指Person.prototype)指针。简单的说就是person1只有__proto__,没有prototype。
通过new 创建的对象和构造函数是没有关系的,跟构造函数的原型有关系,即person1.__proto__ === Person.prototype
搞清楚对象、构造函数他们原型的是什么,其他就更好理解了。
我们在理解new创建对象的过程发生了什么,可以加深理解他们的关系:
一共5步:
(1) 在内存中创建一个新对象。
(2) 这个新对象内部的[[Prototype]]特性被赋值为构造函数的 prototype 属性。
(3) 构造函数内部的 this 被赋值为这个新对象(即 this 指向新对象)。
(4) 执行构造函数内部的代码(给新对象添加属性)。
(5) 如果构造函数返回非空对象,则返回该对象;否则,返回刚创建的新对象。
首先,我们要知道原型链有什么作用,它的作用就是共享属性和方法。
当一个对象访问属性或方法时,首先会在自身上寻找,找不到就会往对象原型上寻找,层层往上寻找的过程就是我们所说的原型链。
如图name是构造函数Person的定义的属性,age是对person1定义的,sex则是构造函数原型定义的。
理解原型,理解下面的关系是很有必要的;
console.log(Person.prototype.__proto__ === Object.prototype); // true
console.log(Person.prototype.__proto__.constructor === Object); // true
console.log(Person.prototype.__proto__.__proto__ === null); // true
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有